Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
#1

Приведение типов (классы) - C++

11.09.2013, 21:57. Просмотров 346. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class B { 
    virtual void f() {} 
}; 
 
class V { 
    virtual void g() {} 
}; 
 
class X { 
}; 
 
class D : public B, virtual public V, virtual public X { 
}; 
 
int main() { 
    D d; 
    V* pv = &d; 
    D* p4 = dynamic_cast<D*>(pv);        // 1 
    X* px = &d; 
    D* p6 = dynamic_cast<D*>(px);        // 2
Почему для компилирования строки 1 - информации достаточно. А для строчки 2 - нет. Из-за того что в классе X нету виртуальной функции. Но причем тут она?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2013, 21:57     Приведение типов (классы)
Посмотрите здесь:

C++ Приведение типов
C++ Приведение типов
Приведение типов. C++
C++ Приведение типов?
Приведение типов C++
Приведение типов C++
C++ Приведение типов
Шаблонные классы. Присвоение к указателю и приведение типов C++
C++ Приведение типов
Приведение типов C++
Приведение типов C++
C++ Приведение типов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
11.09.2013, 22:12     Приведение типов (классы) #2
Класс называется полиморфным если он имеет хотя бы одну виртуальную функцию (определенную или унаследованную). Класс X таким не является. Следовательно...
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
11.09.2013, 22:29  [ТС]     Приведение типов (классы) #3
Цитата Сообщение от Olivеr Посмотреть сообщение
Класс X таким не является. Следовательно...
Тоесть мы любой неполиморфный класс не сможем привести к нужному типу?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
11.09.2013, 22:48     Приведение типов (классы) #4
gore-lykovoe, сможем с помощью static_cast
C++
1
D* p6 = static_cast<D*>(px);

Не по теме:

Общался когда-то с одним программистом на тему преобразований и запомнил его совет, что dynamic_cast следует использовать только для преобразования полиморфного типа, в других случаях - static_cast



Добавлено через 1 минуту
кстати, а зачем тут виртуальное наследование?
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
virtual public V
и еще не забудьте включить RTTI в своем компиляторе
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
11.09.2013, 23:02  [ТС]     Приведение типов (классы) #5
Цитата Сообщение от Olivеr Посмотреть сообщение
кстати, а зачем тут виртуальное наследование?
Это из тестов задание просто.
Yandex
Объявления
11.09.2013, 23:02     Приведение типов (классы)
Ответ Создать тему
Опции темы

Текущее время: 08:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru