成員函式的重新定義


如果基底類別中定義了一個函式,當您繼承了基底類別之後,您可以「重新定義」(Override)這個函式,以讓它適用於衍生類別,例如:

#include <iostream> 
using namespace std;

class Foo1 {
public:
void show() {
cout << "Foo1's show()" << endl;
}
};


class Foo2 : public Foo1 {
public:
void show() {
cout << "Foo2's show()" << endl;
}
};

int main() {
Foo1 f1;
Foo2 f2;

f1.show();
f2.show();

return 0;
}

執行結果:

Foo1's show()
Foo2's show()


如上面這個簡單的程式所表示的,當同一個成員函式在衍生類別中被重新定義,使用此衍生類別所生成的物件來呼叫該函式,所執行的會是衍生類別中所定義的函 式,而基底類別中的同名函式並不受影響。

如果在重新定義某個函式,打算先執行父類別中該函式的內容,則可以使用this關鍵字結合::運算子,指定父類別中該函式來執行,例如: 
class Foo2 : public Foo1 {
public:
    void show() {
        this->Foo1::show();
        cout << "Foo2's show()" << endl;
    }
};

上面的程式中,show()被重新定義了,它會先執行父類別Foo1的show()函式,並接著執行顯示"Foo2's show()"。