STL 容器利用虛擬函數實現多態性,使基底類別指標能夠呼叫衍生類別方法。具體應用包括析構函數和操作成員函數,如 operator[]、push_back()、erase(),以實現動態綁定和儲存不同類型物件。
C 虛擬函數在STL 中的應用:揭秘容器的多態本質
前言
STL(Standard Template Library)是C 中一個強大的容器庫,為我們提供了各種資料結構和演算法。在 STL 中,虛擬函數被廣泛應用,以實現容器的動態多態性。本文將深入探討虛擬函數在 STL 的應用,並透過實戰案例來示範其作用。
虛擬函數簡介
虛擬函數是C 中的一種多態性特徵,它允許衍生類別的物件透過基底類別的指標或引用呼叫它們各自實現的方法。這意味著,衍生類別物件可以表現得像其基底類別對象,並被當作基底類別物件處理。
STL 中虛擬函數的應用程式
STL 中的容器,如 vector、list 和 map,都使用虛擬函數實現其多態性。具體來說,它們在析構函數和一些操作成員函數中聲明了虛擬函數,例如 operator[]、push_back()、erase() 等。
實戰案例:動態綁定與衍生類別容器
為了示範虛擬函數在STL 中的作用,我們建立一個名為Base 的基類,以及兩個衍生類別Derived1 和Derived2。
class Base { public: virtual ~Base() { }; virtual void print() const { cout << "Base" << endl; }; }; class Derived1 : public Base { public: virtual void print() const override { cout << "Derived1" << endl; }; }; class Derived2 : public Base { public: virtual void print() const override { cout << "Derived2" << endl; }; };
接下來,我們建立一個 vector
vector<Base*> vec; vec.push_back(new Base()); vec.push_back(new Derived1()); vec.push_back(new Derived2());
現在,讓我們遍歷 vector 並呼叫每個物件的 print() 方法。由於使用了動態綁定,基底類別指標可以自動呼叫派生類別物件的方法,從而以多態的方式列印物件的類型。
for (Base* obj : vec) { obj->print(); }
輸出:
Base Derived1 Derived2
從輸出可以看到,print() 方法被正確調用,並列印了衍生類別的類型。這證明了虛擬函數在 STL 中是如何實現容器多態性的。
結論
虛擬函數是 STL 中實作容器多態性的關鍵機制。透過允許基底類別指標呼叫衍生類別方法,STL 容器可以動態地儲存和操作不同類型的物件。這種多態性使得 STL 在開發可擴展和可維護的程式碼方面非常強大。
以上是C++ 虛擬函式在 STL 的應用:揭秘容器的多型本質的詳細內容。更多資訊請關注PHP中文網其他相關文章!