虛擬函式是什麼意思

在面向對象程式設計中,虛擬函式(virtual function)是類別(class)的一種成員函式,它允許子類別(subclass)或派生類別(derived class)覆寫(override)它的行為。當你創建一個子類別並定義一個與父類別同名的函式時,這個新定義的函式會覆蓋(override)父類別的函式。這使得程式可以在不同的環境中使用相同的介面,但實際執行的代碼卻不同。

虛擬函式通常用於實現多態(polymorphism),這是一種面向對象程式設計的關鍵特性,它允許你以一種類型的物件參考來使用實際上不同類型的物件。當你調用一個虛擬函式時,實際執行的代碼取決於該物件實際上的類型,而不是參考或指針的類型。

在C++中,你可以通過在函式聲明中使用關鍵字virtual來將一個函式定義為虛擬函式。例如:

class Base {
public:
    virtual void func() {
        std::cout << "Base::func()" << std::endl;
    }
};

class Derived : public Base {
public:
    void func() override {
        std::cout << "Derived::func()" << std::endl;
    }
};

int main() {
    Base* basePtr = new Derived;
    basePtr->func(); // 將調用 Derived::func(),而不是 Base::func()
    return 0;
}

在上面的例子中,Base 類別定義了一個虛擬函式 funcDerived 類別覆寫了這個函式。在 main 函式中,我們創建了一個指向 Derived 類別物件的 Base 類別指針,並通過這個指針調用了 func 函式。由於 func 是虛擬函式,實際執行的代碼是 Derived 類別中定義的 func 函式,而不是 Base 類別中的原始版本。

這種設計模式允許你在程式中使用基類的介面,同時在需要時提供子類別的特定行為。這有助於提高程式碼的靈活性和擴展性。