C++中的override

C++中的override與java等其他的OOP語言有一些不一樣,舉個例子來說,比如你有下面這個代碼:

/*************************************************************************
    > File Name: test.cpp
    > Author: Baniel Gao
    > Mail: [email protected] 
    > Created Time: Mon 22 Aug 2016 09:58:20 PM CST
 ************************************************************************/

#include <iostream>
using namespace std;

class A {
public:
    A():i(0) {
        cout << "A::A()" << endl;
    }
    ~A() {
        cout << "A::~A()" << endl;
    }
    void print() {
        cout << "class A i: " << i << endl;
    }

    void print(int ii) {
        cout << "class A i: " << i << ", ii: " << ii << endl;
    }

protected:
    int i;
};

class B : public A {
public:
    void print() {
        cout << "class B i: " << i << endl; 
    }
};

int main()
{
    A a;
    B b;

    a.print();
    a.print(1);

    b.print();
    b.print(2);

    return 0;
}

如果你瞭解JAVA的話,很容易會覺得這個程序沒有問題,但是編譯的時候出現下面的錯誤:
這裏寫圖片描述
這裏我們g++給出的錯誤不是很友好,但是我們還是能夠依稀明白些什麼。它的意思是說,你要在第47行,也就是b.print(2);這行,要調用帶有int參數的print函數,但是找不到!!有java的基礎,這裏總是感覺十分別扭!!在C++中的override,和java中是很不一樣的,在C++中如果你定義個一個名稱和父類相同的函數時,那麼你就將父類的同名方法在此類中全部覆蓋了!!即使返回值不一樣也不行!!如果還是想要使用父類的帶有int參數的print函數怎麼辦呢?有辦法,可以這麼調用:

b.A::print(2);

好吧,我承認這是一個很噁心人的語法,至少在一個寫慣了java程序的人看來!!但是,這確實是一個巨大的坑,在項目中十足被坑了一把!!!

發佈了89 篇原創文章 · 獲贊 110 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章