在C++中,如果一個派生類(子類)從基類(父類)繼承,并且兩個類都有一個同名的成員函數,那么在訪問這個同名函數時,派生類中的函數會覆蓋基類中的函數。這種行為稱為函數重寫(Function Overriding)。
當你在派生類中使用基類的成員函數時,編譯器會根據對象的實際類型來選擇正確的函數。如果對象是基類的實例,那么將調用基類的函數;如果對象是派生類的實例,那么將調用派生類的函數。
下面是一個簡單的例子:
#include <iostream>
class Base {
public:
void print() {
std::cout << "Base class function" << std::endl;
}
};
class Derived : public Base {
public:
void print() override { // 使用override關鍵字明確表示重寫
std::cout << "Derived class function" << std::endl;
}
};
int main() {
Base *b = new Base();
Derived *d = new Derived();
b->print(); // 輸出 "Base class function"
d->print(); // 輸出 "Derived class function"
delete b;
delete d;
return 0;
}
在這個例子中,Derived
類重寫了Base
類的print()
函數。當我們通過基類指針調用print()
函數時,輸出的是基類的函數;而當我們通過派生類指針調用print()
函數時,輸出的是派生類的函數。