Этот кодНевиртуальные функции перегружен член
#include <iostream>
struct A {
int one() {
std::cout << "oneA" << std::endl;
}
int devone() {
one();
}
};
struct B : A {
int one() {
std::cout << "oneB" << std::endl;
}
};
int main() {
B b;
b.devone();
}
печатает oneâ
Я не понимаю, почему. Я знаю, что если я использую виртуальные функции , то печатается одинB, но почему бы и нет в приведенных выше примерах кода. Нет указателей или ссылок, почему мне нужно объявить функцию виртуальной?
На самом деле есть указатель. Он просто скрыт от вас. Помните, что все функции-члены имеют указатель 'this'. – NathanOliver
Тип 'this' внутри' A :: devone' - 'A *', поэтому вызывается 'A :: one'. – nwp