函數重載和虛函數可以結合使用,允許子類在不修改父類行為的情況下,以不同方式實現相同操作的不同方面。通過在父類中聲明虛函數,并在子類中重載它們,我們可以實現動態多態,允許通過父類引用調用不同子類的特定函數。
C++ 函數重載與虛函數的結合
理解重載和虛函數
重載:具有相同名稱但不同參數列表的函數。
虛函數:父類中定義為 virtual
的成員函數,允許子類重新定義其實現。
函數重載與虛函數的結合
C++ 允許我們在使用虛函數時重載成員函數。這允許子類以不同方式實現同一操作的不同方面,而無需修改父類的行為。
實現
在父類中聲明虛函數:
class Parent { public: virtual void doSomething(); };
登錄后復制
在子類中重載虛函數:
class Child : public Parent { public: @Override void doSomething() { // 子類的特定實現 } };
登錄后復制
實戰案例
考慮以下場景:
有一個 Shape
父類,定義了一個 draw
虛函數,用于繪制形狀。有兩個子類,Circle
和 Rectangle
,它們都有自己的繪畫方式。
代碼實現:
class Shape { public: virtual void draw() = 0; // 純虛函數,強制子類實現 }; class Circle : public Shape { public: @Override void draw() { // 繪制圓的具體實現 } }; class Rectangle : public Shape { public: @Override void draw() { // 繪制矩形的具體實現 } }; int main() { vector<Shape*> shapes; shapes.push_back(new Circle()); shapes.push_back(new Rectangle()); for (Shape* shape : shapes) { shape->draw(); // 調用適當的重載函數 } return 0; }
登錄后復制
通過這種方式,我們可以創建動態多態的方法,它允許我們使用父類指針或引用來調用不同子類的特定函數。