编程笔记

lifelong learning & practice makes perfect

overwrite

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//修不完的bug
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 CBaseDialogCDialog{
public
CBaseDialog(){
bool bRtn=Func();
std::cout<<bRtn<<std::endl;
};
virtual bool Func(){return false;};
}
class CDeriveDialogCBaseDialog{
public
bool Func(){return true;};
}

CDeriveDialog *pDlg=new CDeriveDialog();
//输出什么?

欢迎关注我的其它发布渠道