override 關鍵字
作用:在成員函數聲明或定義中, override 確保該函數為虛函數並覆寫來自基類的虛函數。
位置:函數調用運算符之后,函數體或純虛函數標識 “= 0” 之前。
使用以后有以下好處:
1.可以當注釋用,方便閱讀
2.告訴閱讀你代碼的人,這是方法的復寫
3.編譯器可以給你驗證 override 對應的方法名是否是你父類中所有的,如果沒有則報錯.
override 使用舉例
如果你想重寫父類的方法,比如toString()方法:
#if 1
public :
virtual String toString() override {
//...
}
#else
public :
virtual String toString() override=0;
#endif
正確的是:
public :
String toString() override {
//...
}
假如不小心把方法名寫錯了而沒寫 override ,這時編譯器是可以編譯通過的,因為編譯器以為這個方法是你的子類中自己增加的方法。如:
// 注意這里的小寫方法,實際上是錯誤的。
public :
String tostring() {
//...
}
相反,如果你很機智,在知道自己要重寫父類的方法,加上了 override 標簽后,編譯器會檢查出重寫方法錯誤,會保證你重寫父類方法的正確性。
例子
#include<iostream>
using namespace std;
class base
{
public:
virtual void fun1(void)=0;
};
class derived : public base
{
public:
#if 1 //OK
void fun1(void) override {
cout << "a fun1" << std::endl;
}
#else // err
void fun2(void) override {
cout << "a fun1" << std::endl;
}
#endif
private:
/* data */
};
int main(int argc, char *argv[])
{
derived test;
test.fun1();
return 0;
}
總結:在重寫方法時,最好加上這個 override 這個關鍵字 以 加強代碼規范。