![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Вопрос не ясен. Тебе нужен метод А, он и вызывается. Как ты и хотел -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Повторюсь, методы пренадлежат объекту, а не классу, чтоб метод или переменная принадлежали классу они должны быть объявлены как static. Поэтому как ab не крути, будет вызываться A::OnCalc(), ты ведь написал new A(). Есть такое понятие - vtable. vtable - это таблица, в которой храняться ссылки на все методы и переменные. И когда ты определяешь в предке метод, как виртуальный, то при его появлении в потомке просто меняется адрес в vtable (запутанно объяснил, надеюсь кто-нибудь что-нибудь понял). Кстати, B* bb = (A*)ab; - совершенно бесполезная операция. ab итак типа A*, её незачем к A* преобразовывать, а bb типа B* и ab будет преобразована к B* в результате присвоения автоматически. Лично я в таких случаях преобразовываю явно, считаю что так правильнее: B* bb = (B*)ab; //порядок |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
если уж так, то лучше пользоваться более правильным преобразованием dynamic_cast: B* bb = dynamic_cast<B*>(ab); или, если не хочеться, чтобы выполнялась динамическая проверка, то: B* bb = static_cast<B*>(ab); -------------------- Волны гасят ветер... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |