C++virtual意思

在C++中,virtual是一個關鍵字,它用於聲明虛函式。虛函式是在基類中聲明的,目的是為了允許在派生類中重寫該函式,而調用該函式的對象不必是派生類的類型。

當一個函式被聲明為虛函式時,它就在對象的記憶體布局中創建了一個虛函式表(virtual table,簡稱vtable)條目。這個vtable是一個指向函式地址的指針數組,當對象調用虛函式時,實際調用的是vtable中指向的函式地址。

虛函式的主要作用是實現多態性,多態性是面向對象編程中的一個重要概念,它允許不同的對象對同一訊息做出不同的回響。通過使用虛函式,可以在不改變對象類型的情況下,改變對象的行為。

下面是一個簡單的例子,展示了虛函式的工作方式:

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

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

int main() {
    Base* basePtr = new Derived;
    basePtr->func(); // 即使basePtr是指向Base類型的指針,實際調用的是Derived::func()
    return 0;
}

在這個例子中,Base類中的func()函式被聲明為虛函式,因此當通過指向Base類型的指針調用func()時,實際調用的是指針所指向對象的類型(即Derived類型)的func()函式。這就是虛函式和多態性的作用。