![]() |
|
Модераторы: bsa |
![]()
|
|
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Всем привет. У меня следующий вопрос. Когда мы реализуем механизм наследования, в некоторых книгах пишут, что объекты производного класса также являются объектами базового класса, однако обратное не верно. Приведите пожалуйста примеры что имеется в виду. Спасибо.
|
|||
|
||||
| bomberman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 4.4.2008 Где: Брест Репутация: нет Всего: нет |
Так говорят, потомучто объекты производного класса содержат такие же поля как и объекты базового класса и объекты производных классвов могут пользоваться методами, которые реализованы в базовом классе. Т.е. объект производного класса состоит из: объекта базового класса + своих полей и методов, поэтому и говорят что объект производного класса является объектом базового. Обратное конечно же не верно, потомучто объект базового класса ну никак не может содержать поля производного класса, по крайней мере потому, что базовому классу ничего не известно о существовании производного класса. Если надо, могу развить мысль. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Любая селедка - рыба, но далеко не каждая рыба является селедкой. © помойму Люиса Кэрола |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Спасибо за объяснения, а скажите тогда.
Где можно использовать и зачем нужно приводить тип указатель производного класса указателю базового класса. Если можно с примерами Это сообщение отредактировал(а) yngwie19 - 2.12.2008, 19:04 |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
Немного криво написано, но если я правильно понял, то это нужно для того, чтобы в базовом классе были недоступны те функции, которые используются в производном классе (функции, которые присущи только производному классу). Как-то вот так Это сообщение отредактировал(а) Dmi3ev - 2.12.2008, 19:26 -------------------- |
|||
|
||||
| dsx |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 7.9.2008 Где: Москва Репутация: нет Всего: 1 |
Приведение вверх используется совместно с виртуальными функциями.
Например, мы создаем абстрактный класс(Область), и объявляем в нем виртуальную функцию(вычисление площади). От это класса наследуются классы Прямоугольник и Треугольник - конкретные фигуры, и там эта функция перекрывается конкретными реализациями вычисления площади. При этом, мы можем использовать указатель базового класса Область для создания объектов классов-наследников Прямоугольник и Треугольник. При вызове через этот указатель виртуальной функции подсчета площади, будет выполняться та функция, которая соответствует размещенному по этому указателю объекту. Таким образом, в интерфейсе программы мы можем не задумываться о том, объект какого из классов-наследников у нас создан - просто вызываем функцию, и она считает то, что нужно. Описанный пример на C++
|
|||
|
||||
| Annihilator |
|
||||
![]() bytegrinder ![]() ![]() Профиль Группа: Участник Сообщений: 493 Регистрация: 21.11.2006 Где: Омск Репутация: 1 Всего: 3 |
Наоборот, надо базовый к производному привести. -------------------- Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо |
||||
|
|||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
dsx, Я понял твою мысль, а не мог бы ты привести пример попроще. Очень много кода, сложно сразу охватить.
|
|||
|
||||
| dsx |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 7.9.2008 Где: Москва Репутация: нет Всего: 1 |
|
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
dsx, Все теперь понятно, т.е при использовании полиморфизма мы всегда работаем через указатель на базовый абстрактный класс да? А когда динамически выделяем для него пямять, например:
то здесь происходит неявное преобразование (Human*)Man, так? P.S: Кстати зачем скобки после Man и Woman ? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
вот пример с использованием и понижающего и повышающего преобразования :
Это сообщение отредактировал(а) mes - 2.12.2008, 23:53 |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
mes, спасибо за пример, это пока сложно для меня, ответь пожалуйста на последний вопрос который я задал
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| J0ker |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
наличие и отсутствие скобок имеет значение для PODS/POD типов - наличие означает инициализация дефолтным констрактором, отсутствие - отсутствие инициализации т.е.
Это сообщение отредактировал(а) J0ker - 3.12.2008, 00:16 |
||||
|
|||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
т.е при использовании полиморфизма мы всегда работаем через указатель на базовый абстрактный класс да? А когда динамически выделяем для него пямять, например:
то здесь происходит неявное преобразование (Human*)Man, так? |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |