Почему вызов виртуальной функции-члена в конструкторе является невиртуальным вызовом? ⇐ C++
-
Гость
Почему вызов виртуальной функции-члена в конструкторе является невиртуальным вызовом?
Предположим, у меня есть два класса C++:
класс А { публика: А() { ФН(); } виртуальная пустота fn() { _n = 1; } int getn() { return _n; } защищено: интервал _n; }; класс B: общественный A { публика: Б() : А() {} виртуальная пустота fn() { _n = 2; } }; Если я напишу следующий код:
int main() { Б б; int n = b.getn(); } Можно было ожидать, что для n установлено значение 2.
Оказывается, для n установлено значение 1. Почему?
Предположим, у меня есть два класса C++:
класс А { публика: А() { ФН(); } виртуальная пустота fn() { _n = 1; } int getn() { return _n; } защищено: интервал _n; }; класс B: общественный A { публика: Б() : А() {} виртуальная пустота fn() { _n = 2; } }; Если я напишу следующий код:
int main() { Б б; int n = b.getn(); } Можно было ожидать, что для n установлено значение 2.
Оказывается, для n установлено значение 1. Почему?
Мобильная версия