Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
1

Указатель на производный класс

31.05.2016, 02:47. Показов 2720. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Есть вопрос.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Base
{
    
};
 
class Derived : public Base
{
    
};
 
int main()
{
    Base *a = new Derived;
        return 0;
}
Указатель на базовый класс может ссылаться на объект производного. А почему указатель производного класса не может ссылаться на объект базового класса ?
C++
1
    Derived *a = new Base;   //Ошибка.
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2016, 02:47
Ответы с готовыми решениями:

Наследование, указатель на производный класс
Указатель на тип базового класса при открытом наследовании может хранить адрес объекта производного...

Указатель на базовый класс и на производный
Пытаюсь разобраться с классами и наследованием. Сама эта задача из Дейтела "Как программировать...

Разработать производный от абстрактного класса Figure класс и класс, производный от производного
Разработать базовый абстрактный класс Figure с пустым виртуальным методом print для вывода в...

Есть производный класс и базовый; при чём производный использует только ЧАСТЬ ресурсов базового, правильно ли это?
Ну то есть базовый класс A, с полями, допустим, a, b, c, d. И я проектирую производный класс B и я...

8
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
31.05.2016, 04:08 2
Цитата Сообщение от NewBi Посмотреть сообщение
Указатель на базовый класс может ссылаться на объект производного.
В качестве автомобиля (базовый класс) можно использовать автомобиль с прицепом (производный класс).
Цитата Сообщение от NewBi Посмотреть сообщение
А почему указатель производного класса не может ссылаться на объект базового класса ?
Так почему же в качестве автомобиля с прицепом (производный класс) нельзя использовать автомобиль без прицепа (базовый класс)?

Производный класс, это базовый класс+"прицеп". Если вы используете указатель на базовый класс, вы говорите что и без прицепа перетопчетесь. Но если прицеп все же есть - ну и фиг с ним, ехать же не мешает. Если вы используете указатель на производный класс, вы говорите что прицеп быть должон. Ну а раз сами сказали что прицеп быть должон, компилятор и проверяет есть прицеп (объект производного класса) или нет.
2
25 / 25 / 23
Регистрация: 07.06.2015
Сообщений: 142
31.05.2016, 04:08 3
ну... это принципы ООП, насколько я помню
как в свое время оглашалось у нас на лекциях: "все родители знают о своих детях, но дети не все знают о своих родителях, если вообще что-то о них знают".
2
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
31.05.2016, 14:02  [ТС] 4
Renji, Remuless, Благодарю за ответы, а есть какая-нибудь более научная формулировка ответа ?))
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
31.05.2016, 14:22 5
Лучший ответ Сообщение было отмечено NewBi как решение

Решение

Цитата Сообщение от NewBi Посмотреть сообщение
Renji, Remuless, Благодарю за ответы, а есть какая-нибудь более научная формулировка ответа ?))
Если более научно, то сначала "наследовали" так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct Base
{
    int x;
};
struct Derived
{
    Base parent;
    int y;
};
int main()
{
    Derived derived;
    struct Base*pointer;
    pointer=&derived.parent;
    return 0;
}
Потом впилили C++ и сказали "а давайте сделаем под капотом как в Си, но чтоб .parent не писать?". Теперь, когда вы пытаетесь впихнуть адрес предка в указатель на потомка, компилятор печатает "pointer=&parent.child... Стоп, нет же там child, что за фигню вы написали?".
1
1 / 1 / 0
Регистрация: 20.04.2015
Сообщений: 73
31.05.2016, 16:12  [ТС] 6
Renji, Интересно, не знал как раньше было наследование, спасибо. Ну а словесная формулировка четкая имеется ? Из книги может какой или стандарта? Например: Указатель на производный класс не может ссылаться на базовый, потому что... (*и тут наименование причины*) ??
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
31.05.2016, 16:27 7
Ну, можно глянуть "Дизайн и эволюция C++", раздел 2.9, как раз и рассказывающий как возникали механизмы наследования.
Вероятно, формулировка есть и где-то в недрах стандарта, но лень искать.
1
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
31.05.2016, 16:43 8
Лучший ответ Сообщение было отмечено NewBi как решение

Решение

Цитата Сообщение от NewBi Посмотреть сообщение
Указатель на производный класс не может ссылаться на базовый, потому что
базовый класс не может всего того,
на что способен класс производный.
2
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
01.06.2016, 07:15 9
Цитата Сообщение от NewBi Посмотреть сообщение
Указатель на базовый класс может ссылаться на объект производного. А почему указатель производного класса не может ссылаться на объект базового класса ?
Цитата Сообщение от NewBi Посмотреть сообщение
а есть какая-нибудь более научная формулировка ответа ?))
В С++ наследование означает, что объект производного класса содержит в качестве подобъекта объект базового класса. В объекте же базового ничего от производного не содержится.
2
01.06.2016, 07:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2016, 07:15
Помогаю со студенческими работами здесь

Базовый класс Complex и производный класс для реализации квадратных матриц
1) Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в...

Создать класс Point и производный класс ColoredPoint (цветная точка)
Создайте класс Point (точка на плоскости), характеризующийся двумя координатами. Создайте...

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.

Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты
Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru