Я написал фрагмент кода, но меня смущает его вывод:
#include <iostream>
using namespace std;
class B{
public:
virtual void foo() {cout << "B::foo" << endl;}
};
class D:public B{
public:
virtual void foo() {cout << "D::foo" << endl;}
void disp() {cout << "D::disp" << endl;}
};
void func(B *pb){
D *pd1 = static_cast<D*>(pb);
pd1->foo();
pd1->disp();
}
int main(int argc, char *argv[])
{
B* pb = new B();
func(pb);
return 0;
}
Результат:
B::foo
D::disp
Но насколько мне известно, pb
указывает на тип B. И в нем нет функции с именем disp()
? Итак, почему он мог получить доступ к disp()
функции в классе D?