场景描述:如果父类指针指向子类的实例,并且调用的函数是一个子类和父类同名的函数,并且这个函数没有被定义为虚函数,肯定无法通过父类指针调用子类的接口。测试代码如下:
class CFather{ public: void Display() { cout<<"Father display"<<endl; } }; class CSon:public CFather { public: void Display() { cout<<"Son dispaly"<<endl; } };
CSon son; son.Display(); //上面说明的是子类的同名函数覆盖掉父类的同名函数 CFather* p=new CSon; p->Display(); if(NULL!=p) { delete p; p=NULL; } //下面说明了调用的是父类的同名函数
从上面可以看出父类的虚函数在子类中将被重新定义,而非虚函数将在通过父类指针的过程中被隐藏了。
时间: 2024-10-28 22:06:12