函數重載和虛函數可以結合使用,允許子類在不修改父類行為的情況下,以不同方式實現相同操作的不同方面。通過在父類中聲明虛函數,并在子類中重載它們,我們可以實現動態多態,允許通過父類引用調用不同子類的特定函數。
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;
}
登錄后復制
通過這種方式,我們可以創建動態多態的方法,它允許我們使用父類指針或引用來調用不同子類的特定函數。






