C++中派生類的多態是通過虛函數和虛函數表實現的。在基類中聲明一個虛函數,然后在派生類中重寫這個虛函數,就可以實現多態。
具體來說,當一個指向基類的指針或引用調用一個虛函數時,實際上會調用指向派生類對象的虛函數。這是因為每個對象都有一個虛函數表,存儲了該對象的虛函數地址,通過這個虛函數表可以實現動態綁定,實現多態性。
以下是一個簡單的示例:
#include <iostream>
class Base {
public:
virtual void print() {
std::cout << "Base::print() called" << std::endl;
}
};
class Derived : public Base {
public:
void print() override {
std::cout << "Derived::print() called" << std::endl;
}
};
int main() {
Base* basePtr = new Derived();
basePtr->print(); // 輸出 Derived::print() called
delete basePtr;
return 0;
}
在上面的示例中,基類Base
中聲明了一個虛函數print()
,派生類Derived
重寫了這個虛函數。在main()
函數中,我們用一個指向基類對象的指針basePtr
指向一個派生類對象,并調用print()
函數,最終輸出的是Derived::print() called
,實現了多態。