目录
override和overwrite区别
1、override:
如果父类Father中存在那么一个虚函数virtual void overrideFunc(),而子类Son1中恰好也有那么一个overrideFunc()(可以不带virtual或override),那么我们说子类Son1 override了父类Father的overrideFunc()。
这时,若生成了一个子类的实例son1,son1将不会知道Father.overrideFunc()的地址。因此,就算son1的父类指针调用overrideFunc,调用到的函数仍然是子类的。
2、overwrite:
如果父类Father中存在那么一个函数void overwriteFunc()(不带virtual),而子类Son2中恰好也有那么一个 void overwriteFunc(),那么我们说子类Son2 overwrite了父类Father的overwriteFunc()。
这时,若生成了一个子类的实例son2,son2将可以知道Father.overwriteFunc()的地址。当用son2的子类指针调用overwriteFunc()时,调到的是子类的;当用son2的父类指针调用overwriteFunc()时,调到的是父类的。
检验代码:
#include <iostream>
class Father
{
public:
virtual void overrideFunc() {
std::cout << "This is Father_overrideFunc" << std::endl;
}
void overwriteFunc() {
std::cout << "This is Father_overwriteFunc" << std::endl;
}
};
class Son1 : public Father
{
public:
virtual void overrideFunc() override{
std::cout << "This is Son1_overrideFunc " << std::endl;
}
};
class Son2 : public Father
{
public:
void overwriteFunc() {
std::cout << "This is Son2 _overwriteFunc" << std::endl;
}
};
int main()
{
//override:
Son1* pson1 = new Son1;
pson1->overrideFunc(); //This is Son1_overrideFunc
Father* pFather = pson1;
pFather->overrideFunc();//This is Son1_overrideFunc
//overwrite:
Son2* pson2 = new Son2;
pson2->overwriteFunc();//This is Son2 _overwriteFunc
pFather = pson2;
pFather->overwriteFunc();//This is Father_overwriteFunc
}