я проходил через эту Book и я не могу обернуть мою голову вокруг этого:Наследование и указатели базового класса
если B::f(int)
скрывает A::f()
, почему pa1->f();
не выдаст ошибку?
Не следует указывать, что функция f()
не существует в class B
? И если pa1
указывает на объект class B
, то pa1->f();
должен привести к ошибке, как и b.f()
!
Пожалуйста, объясните это, поскольку я не могу понять это через книгу! Спасибо заранее!
#include <iostream>
using namespace std;
struct A {
virtual void f() { cout << "Class A" << endl; }
};
struct B: A {
void f(int) { cout << "Class B" << endl; }
};
struct C: B {
void f() { cout << "Class C" << endl; }
};
int main() {
B b; C c;
A* pa1 = &b;
A* pa2 = &c;
// b.f();
pa1->f();
pa2->f();
}
Хорошо, спасибо! –