1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class CBase { public: virtual bool Func(unsigned int num,double dNum,vector<bool>& status){return false;}; protected: private: } class CDerive { public: bool Func(unsigned int num,double dNum){return true;}; protected: private: } int main(){ CBase *pBase=new CDerive(); std::cout<<pBase->Func()<<std::endl; }
|
输出是什么不难看出,pBase是基类指针指向子类对象,调用Func函数,但是子类的Func与父类参数不同,不是overwrite,会调用基类的的Func实现输出false。
- 所以在重写这类函数时注意参数和返回值,因为不是纯虚函数,没有实现该函数也能生成实例,但是在调用时会出现问题。当你想要调用子类的实现时就会出现与设定不同的行为发生。
在window下窗口类的构造函数调用重写函数不能生效?
我是这么写的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class CBaseDialog:CDialog{ public: CBaseDialog(){ bool bRtn=Func(); std::cout<<bRtn<<std::endl; }; virtual bool Func(){return false;}; } class CDeriveDialog:CBaseDialog{ public: bool Func(){return true;}; }
CDeriveDialog *pDlg=new CDeriveDialog();
|