关键字覆盖在子类的虚拟函数中有什么用途



关键字virtual允许派生类在需要多态性的情况下进行覆盖,无论是否使用关键字覆盖,都可以关闭。添加覆盖如何影响程序?

示例代码:

#include <iostream>
using namespace std;
class Base {
public:
void Print() {who();}
virtual void who() { cout << "I am Basen"; }
};
class Derived_A : public Base {
public:
void who() { cout << "I am Derived_An"; }
};
class Derived_B : public Base {
public:
virtual void who() override { cout << "I am Derived_Bn"; }
};
int main()
{
Base b;
b.Print(); //-> return "I am Base"
Base* ptr = new Derived_A();
ptr->Print(); // was expecting "I am Base" instead returns "I am Derived_A"
Base* ptr1 = new Derived_B();
ptr1->Print(); // expecting "I am Derived_B" and surely returns "I am Derived_B"
return 0;
}
override添加到成员函数不会以任何方式改变程序的工作方式。你只需要告诉编译器你想重写基类函数,如果你不知何故犯了一个错误,你想得到一个编译错误,以为你在重写一个函数,而事实上你没有。

示例:

class Base {
public:
virtual void foo(int) {}
};
class Derived : public Base {
public:
void foo(double) override {} // compilation error
};

最新更新