函數(shù)重載和虛函數(shù)可以結(jié)合使用,允許子類(lèi)在不修改父類(lèi)行為的情況下,以不同方式實(shí)現(xiàn)相同操作的不同方面。通過(guò)在父類(lèi)中聲明虛函數(shù),并在子類(lèi)中重載它們,我們可以實(shí)現(xiàn)動(dòng)態(tài)多態(tài),允許通過(guò)父類(lèi)引用調(diào)用不同子類(lèi)的特定函數(shù)。
C++ 函數(shù)重載與虛函數(shù)的結(jié)合
理解重載和虛函數(shù)
重載:具有相同名稱(chēng)但不同參數(shù)列表的函數(shù)。
虛函數(shù):父類(lèi)中定義為 virtual
的成員函數(shù),允許子類(lèi)重新定義其實(shí)現(xiàn)。
函數(shù)重載與虛函數(shù)的結(jié)合
C++ 允許我們?cè)谑褂锰摵瘮?shù)時(shí)重載成員函數(shù)。這允許子類(lèi)以不同方式實(shí)現(xiàn)同一操作的不同方面,而無(wú)需修改父類(lèi)的行為。
實(shí)現(xiàn)
在父類(lèi)中聲明虛函數(shù):
class Parent { public: virtual void doSomething(); };
登錄后復(fù)制
在子類(lèi)中重載虛函數(shù):
class Child : public Parent { public: @Override void doSomething() { // 子類(lèi)的特定實(shí)現(xiàn) } };
登錄后復(fù)制
實(shí)戰(zhàn)案例
考慮以下場(chǎng)景:
有一個(gè) Shape
父類(lèi),定義了一個(gè) draw
虛函數(shù),用于繪制形狀。有兩個(gè)子類(lèi),Circle
和 Rectangle
,它們都有自己的繪畫(huà)方式。
代碼實(shí)現(xiàn):
class Shape { public: virtual void draw() = 0; // 純虛函數(shù),強(qiáng)制子類(lèi)實(shí)現(xiàn) }; class Circle : public Shape { public: @Override void draw() { // 繪制圓的具體實(shí)現(xiàn) } }; class Rectangle : public Shape { public: @Override void draw() { // 繪制矩形的具體實(shí)現(xiàn) } }; int main() { vector<Shape*> shapes; shapes.push_back(new Circle()); shapes.push_back(new Rectangle()); for (Shape* shape : shapes) { shape->draw(); // 調(diào)用適當(dāng)?shù)闹剌d函數(shù) } return 0; }
登錄后復(fù)制
通過(guò)這種方式,我們可以創(chuàng)建動(dòng)態(tài)多態(tài)的方法,它允許我們使用父類(lèi)指針或引用來(lái)調(diào)用不同子類(lèi)的特定函數(shù)。