Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
1

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

11.09.2013, 21:57. Показов 2491. Ответов 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 нету виртуальной функции. Но причем тут она?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2013, 21:57
Ответы с готовыми решениями:

Шаблонные классы. Присвоение к указателю и приведение типов
Добрый вечер, ув. форум, есть к вам вопрос. Есть род. абстрактный класс: ParentAbstact Есть два...

Базовый класс с виртуальными методами и классы наследники. Динамическое приведение типов
Доброго времени суток. Помогите указать на ошибки и, по возможности, исправить) Необходимо создать...

Приведение типов
В паскале можно привести типы: type ts = 0..9; chislo = array of ts; Как это сделать на С++?

Приведение типов
Уважаемые программеры, ПОМОГИТЕ!!! Нужно (мне) реализовать шаблонную функцию для приведения типов....

4
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
11.09.2013, 22:12 2
Класс называется полиморфным если он имеет хотя бы одну виртуальную функцию (определенную или унаследованную). Класс X таким не является. Следовательно...
1
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
11.09.2013, 22:29  [ТС] 3
Цитата Сообщение от Olivеr Посмотреть сообщение
Класс X таким не является. Следовательно...
Тоесть мы любой неполиморфный класс не сможем привести к нужному типу?
0
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
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 в своем компиляторе
0
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
11.09.2013, 23:02  [ТС] 5
Цитата Сообщение от Olivеr Посмотреть сообщение
кстати, а зачем тут виртуальное наследование?
Это из тестов задание просто.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2013, 23:02

Приведение типов
Чем отличается type(x) от (type) x?

Приведение типов
Как привести наследника ко второму родителю? class Parent1 { public: int a; int b; ...

Приведение типов.
Доброго времени суток! В общем, есть класс Matrix(прямоугольные над полем вещ. чисел)....

Приведение типов
При вводе с клавиатуры s = 11 и a = 1.1, получаем 9. Результат переменной d = 10, это правильно. В...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.