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

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

Восстановить пароль Регистрация
 
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
11.09.2013, 21:57     Приведение типов (классы) #1
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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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     Приведение типов (классы)
Ответ Создать тему
Опции темы

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