Я хочу знать, почему эта функция печатает «aba h()», а не «son h()» из-за ее виртуального. Я подумал, что, возможно, функция скрывает другую функцию, но имеет такую же подпись.виртуальная функция не входит в базовый класс
class Aba: public Saba {
public:
Aba(){cout << "Aba Ctor" << endl;}
Aba(const Aba& a){cout << "Aba Copy Ctor" << endl;}
~Aba(){cout << "Aba Dtor" << endl;}
virtual void g(){cout << "Aba g()" << endl;}
virtual void f(int){cout << "Aba f(int)" << endl;}
virtual void h(){cout << "Aba h()" << endl;}
};
class Son: public Aba {
public:
Son(){cout << "Son Ctor" << endl;}
Son(const Son& a){cout << "Son Copy Ctor" << endl;}
~Son(){cout << "Son Dtor" << endl;}
void f(){cout << "Son f()" << endl;}
void h(){cout << "Son h()" << endl;}
};
главная:
int main()
{
Aba aba = Aba();
aba.h();
return 0;
}
Это явная цель виртуальных функций. Создавая 'Aba', вызов' h() 'разрешает' Aba :: h'. Виртуальные функции знают о созданном типе. Не виртуальная функция - нет. –
Зачем это печатать «Сын»? Вы вообще не ссылаетесь на «Сын» в 'main()'. –
@JohnKugelman вы входите в виртуальную часть сына только тогда, когда есть ссылка? – jaldk