私はコードを書きましたが、その出力と混同しています。
#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の関数にアクセスできるのでしょうか。