C++11: nullptr_override _final

nullptr

C++11新特性,避免出現以下狀況java

void fun(int i) {
    cout << "fun(int i )" << endl;
}

void fun(const char* i) {
    cout << "fun(const char* i )" << endl;
}

int main() {
    fun(nullptr); // ok
    fun(NULL); // compile err
    return 0;
}

override

避免在繼承時,本意是重寫,卻因爲參數類型的錯誤,變成了重載ide

class B 
{
public:
   virtual void f(short) {std::cout << "B::f" << std::endl;}
};

class D : public B
{
public:
   //指定是對base的重寫
   virtual void f(int) override {std::cout << "D::f" << std::endl;} // compiler err
};

final

相似java中的機制,將函數寫死,不容許派生類進行重寫函數

class D2 : public B
{
public:
   // 重寫B的f函數,且不容許繼承D2的派生類進一步重寫f函數
   virtual void f(int) override final {std::cout << "D2::f" << std::endl;}
};
相關文章
相關標籤/搜索