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

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

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

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

11.09.2013, 21:57. Просмотров 371. Ответов 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++
Добрый вечер, ув. форум, есть к вам вопрос. Есть род. абстрактный класс: ParentAbstact Есть два наследника: ChildOne : public...

Приведение типов - C++
Есть код вызова метода: obj.func(char a, char b) сам метод: void func(char a, char b) { int i = (int)a, int j = (int)b; В...

Приведение типов? - C++
Подскажите, пожалуйста что происходит. Не понимаю почему такой код работает. .h class Km { private: static const...

Приведение типов - C++
Делаю программу, которая кроме всего прочего должна отсортировать массив. Использую для этого qsort. Вот что получилось: ...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
11.09.2013, 22:12 #2
Класс называется полиморфным если он имеет хотя бы одну виртуальную функцию (определенную или унаследованную). Класс X таким не является. Следовательно...
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
11.09.2013, 22:29  [ТС] #3
Цитата Сообщение от Olivеr Посмотреть сообщение
Класс X таким не является. Следовательно...
Тоесть мы любой неполиморфный класс не сможем привести к нужному типу?
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
11.09.2013, 23:02  [ТС] #5
Цитата Сообщение от Olivеr Посмотреть сообщение
кстати, а зачем тут виртуальное наследование?
Это из тестов задание просто.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2013, 23:02
Привет! Вот еще темы с ответами:

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

Приведение типов - C++
Необходимо привязать адрес массива double по указателю к адресу структуры. Массив сам создан в другом приложении. Если использовать...

Приведение типов - C++
Доброго времени суток. Есть вопрос. Допустим: class Base { ..... } class Derived:public Base{ .... }

приведение типов - C++
Объясните, пожалуйста, почему возникает такая ошибка: error C2666: 'operator *' : 4 overloads have similar conversions ? Из-за того,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.09.2013, 23:02
Ответ Создать тему
Опции темы

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