У меня проблемы с пониманием виртуальных функций. Когда я перегружаю виртуальную функцию, вызывается только новая производная функция? Или как производные, так и базовые функции? Потому что я заметил, что когда вызываются виртуальные деструкторы, то вызывается база И деструкторы производного класса.
деструкторы являются специальными функциями-членами в этом конкретном отношении.
Если у вас есть виртуальный деструктор базового класса, он будет правильно вызывать Base, а также деструкторы производного класса во время полиморфного удаления (вызов delete для указателя базового класса pointinf на объект производного класса.).
Однако другие виртуальные функции-члены не имеют такой же особый статус, как деструкторы. Только функция, определенная для соответствующего типа объекта, вызывается. Если вам нужна любая другая функция для вызова, вы должны сделать это явно.
объект производного класса — не что иное, как обертка для объекта базового класса.
Таким образом, в случае деструкторов, оба деструктора должны быть вызваны, что является ожидаемым поведением.
В случае виртуальной функции вам предоставляется возможность заменить функцию в базовом классе. Поэтому использование указателя базового класса для хранения объекта производного класса вызовет только виртуальную функцию в производном классе.