1.简介
C++为我们提供了继承和虚函数的重写特性。 在派生类中,重写虚函数不强制要求使用 virtual 关键字,并且C++并没有要求强制检查虚函数的重写是否真正覆盖了基类的虚函数,因为在派生类中,也可以增添新的虚函数,以供下一级的派生类重写。由于检查的不够严谨,就有可能产生错误。
2.有可能产生的错误
最常见的错误就是派生类想要重写基类的虚函数,但是由于参数类型的不同,导致结果和预期不同,例如:
#include"stdafx.h"
#include<iostream>
using namespace std;
class BaseClass
{
public:
BaseClass(){}
~BaseClass(){}
public:
virtual void func(int param) { cout << "BaseClass::func. param = " << param <<endl; }
virtual void func2() const { cout<< "BaseClass::func2."<<endl;}
};
class DeriveClass : public BaseClass
{
public:
DeriveClass(){}
~DeriveClass(){}
public:
virtual void func(float param) { cout << "DeriveClass::func. param = " << param <<endl; }
virtual void func2() { cout<< "DeriveClass::func2."<<endl;}
};
int main()
{
BaseClass* pBase = new BaseClass();
pBase->func(1);
pBase->func2();
cout<<endl;
De

本文介绍了C++11中为避免错误重写虚函数而引入的`override`和`final`特性。`override`用于明确表示函数重写基类的虚函数,若未成功重写则编译报错。`final`则禁止子类进一步重写特定虚函数,增强代码安全性和可读性。
最低0.47元/天 解锁文章
4823

被折叠的 条评论
为什么被折叠?



