Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Теперь вернусь к основному вопросу
Цитата Alexanderkrup:
В классах есть переопределенные виртуальные функции класса base. Как сделать так, что бы я мог вызывать эти функции. Например вызвать их из класса name, а не только из publication. »
Суть виртуальных функций и заключается в том, что при обращении к методу на любом из уровней многоуровнего класса, будет вызвана реализация самого "верхнего" класса для данного объекта.
Таким образом имена "виртуальных" методов можно спокойно использовать в любом классе, в котором этот метод уже определён (пусть даже "абстрактно").

И нет разницы, производится ли вызов из другого метода данного класса (командой this->VM(); ) или же извне по указателю базового класса (командой TBaseClass->VM(); ). В обоих случаях механизм виртуальных функций определит настоящий класс данного объекта и вызовет соответствующую реализацию для данного уровня.

P.S.
Для того, чтобы вызвать конкретную реализацию виртуальной функции из базового класса (например, чтобы выполнить все реализации по цепочке), нужно написать команду так TBaseClass:VM();

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:28, 15-12-2011 | #3