![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Читаю книгу, в конце главы вопрос:
"Существует один случай, когда производный класс не должен предоставлять инициализирующих значений для своих виртуальных базовых классов. Что это за случай?" на англ.: "There is one case in which a derived class need not supply initializers for its virtual base class(es). What is this case?" Я думаю правильный ответ "Это случай с абстрактным базовым классом" Но мало ли. Мне интересно узнать правду ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Я использую абстрактные базовые классы и передаю им значения для инициализации. Думаю правильный ответ "Если они не требуются" - если в базовом классе нет никаких инициализирующих значений - есть только методы. |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
всмысле этот тот случай, когда используется конструктор по умолчанию? |
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Само собой, если у базового класса нет конструктора - то и передавать ему ничего нельзя - он же явно не вызывается. В смысле когда у конструктора базового класса нет параметров - ему нечего передавать. Вызывается базовый конструктор без параметров. Если, конечно, я правильно вопрос понял:
Не должен - если их нет. Если они нужны - должен. Положено мясо - ешь, не положено не ешь... ![]() |
||||
|
|||||
Fazil6 |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
не думаю, что речь идет о этом.не зря ведь в вопросе сказано
Вообще с виртуальными базовыми классами ситуация сложнее чем с обычным наследованием. Не знаю в каком контексте и какой именно случай имел в виду автор но, при использовании виртуального базового класса и необходимости вызова его конструктора с параметрами, этот инициализирующий конструктор должен вызываться самым последним классом в иерархии. Т.е. что-то типа того
вобщем как вариант ответа если этот класс имеет наследника(ов) |
||||||
|
|||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
он может вызываться и всеми предпоследними классами в иерархии. только компилятор будет игнорировать все вызовы, за исключением последнего класса в иерархии вирт.наследования инициализировать базовый виртуальный класс можно не только в наследуемом от него классе, но и в любом другом. Только в этом случае компилятор будет игнорировать инициализацию конструктора базового вирт.класса в списке инициализации. Это сообщение отредактировал(а) zim22 - 11.4.2009, 17:09 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
поэтому существует такая рекомендация: неиметь данных в базовых виртуальных классах, т.е. использовать их как интерфейсы
А еще одна рекомендация, которая как правило идет под номером 1, избегать ситуаций когда нужно использовать виртуальное наследование ![]() Но это уже какждый решает для себя сам. Добавлено через 45 секунд может, но не обязан Добавлено через 12 минут и 48 секунд я не знаю откуда ты вырываешь эти цитаты, или ты сам формулируешь, но эта мысль также не совсем точна. Дело в том, что инициализировать базовый виртуальный класс (как у тебя сказано) действительно можно не только в наследуемом от него классе, но и в любом другом, но если это последний класс в иерархии, то инициализировать базовый виртуальный класс он обязан, т.е. там он должен быть полюбому, а если это не последний , то вовсе необязательно |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |