C++中派生類的多態(tài)是通過虛函數(shù)和虛函數(shù)表實(shí)現(xiàn)的。在基類中聲明一個(gè)虛函數(shù),然后在派生類中重寫這個(gè)虛函數(shù),就可以實(shí)現(xiàn)多態(tài)。
具體來說,當(dāng)一個(gè)指向基類的指針或引用調(diào)用一個(gè)虛函數(shù)時(shí),實(shí)際上會(huì)調(diào)用指向派生類對(duì)象的虛函數(shù)。這是因?yàn)槊總€(gè)對(duì)象都有一個(gè)虛函數(shù)表,存儲(chǔ)了該對(duì)象的虛函數(shù)地址,通過這個(gè)虛函數(shù)表可以實(shí)現(xiàn)動(dòng)態(tài)綁定,實(shí)現(xiàn)多態(tài)性。
以下是一個(gè)簡單的示例:
#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
中聲明了一個(gè)虛函數(shù)print()
,派生類Derived
重寫了這個(gè)虛函數(shù)。在main()
函數(shù)中,我們用一個(gè)指向基類對(duì)象的指針basePtr
指向一個(gè)派生類對(duì)象,并調(diào)用print()
函數(shù),最終輸出的是Derived::print() called
,實(shí)現(xiàn)了多態(tài)。