Никогда не вызывайте виртуальные функции в конструкторе или деструкторе Начну с повторения: вы не должны вызывать виртуальные функции во время работы конструкторов или деструкторов, потому что эти вызовы будут делать не то, что вы думаете, и результатами их работы вы будете недовольны.Oct 18, 2018
При вызове виртуального метода из конструктора учитывается тип времени выполнения создаваемого экземпляра. Исходя из этого типа и происходит виртуальный вызов. Несмотря на то, что вызов метода происходит в конструкторе базового типа, фактический тип создаваемого экземпляра – Derived, что и определяет выбор метода.
@Mikhailo: Как же нету? А откуда методу CallReport на этапе компиляции знать, что ему нужно вызвать именно Second::Report ? – VladD. 17 ...
Когда в конструкторе вызывается виртуальная функция, она работает только ... Подробнее про виртуальные методы можно почитать в спецификации.
Начну с повторения: вы не должны вызывать виртуальные функции во время работы конструкторов или деструкторов, потому что эти вызовы будут делать не то, что вы ...
В С++ вызов виртуального метода в конструкторе базового класса будет просто вызывать метод, как если бы производный класс еще не существует (потому что это ...
Конструктор незапечатанного типа вызывает виртуальный метод, определенный в его классе. ... Как видно из выходных данных, DerivedType.
следовательно всю механику обозначили как UB. если так, тогда весь полиморф можно назвать одним большим UB. потому что вызвать чисто-виртульную ...
Вы можете вызвать виртуальную функцию в конструкторе. ... Метод коры в классе собаки вызывается как в конструкторе, так и в деструкторе.
Когда в конструкторе вызывается виртуальная функция, она работает только ... Подробнее про виртуальные методы можно почитать в спецификации.
Внутри конструкторов и деструкторов виртуальные функции теряют виртуальность. ... если эти функции вызывают виртуальные функции, как, например, ...