在C++中,虛函數(shù)(virtual function)允許我們?cè)谂缮愔兄貙懟愔械暮瘮?shù)。當(dāng)使用繼承時(shí),如果基類中的某個(gè)成員函數(shù)被聲明為虛函數(shù),那么派生類中的同名函數(shù)將自動(dòng)成為虛函數(shù)。這使得我們可以通過基類指針或引用來調(diào)用派生類中的實(shí)現(xiàn),從而實(shí)現(xiàn)多態(tài)性。
以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用繼承和虛函數(shù):
#include <iostream>
// 基類 Shape
class Shape {
public:
// 虛函數(shù) area()
virtual double area() const {
return 0.0;
}
};
// 派生類 Circle,繼承自 Shape
class Circle : public Shape {
public:
// 重寫基類中的虛函數(shù) area()
double area() const override {
double radius = 5.0; // 假設(shè)半徑為 5
return 3.14159 * radius * radius;
}
};
// 派生類 Rectangle,繼承自 Shape
class Rectangle : public Shape {
public:
// 重寫基類中的虛函數(shù) area()
double area() const override {
double width = 4.0; // 假設(shè)寬度為 4
double height = 6.0; // 假設(shè)高度為 6
return width * height;
}
};
int main() {
// 使用基類指針指向派生類對(duì)象
Shape* shape_ptr = new Circle();
std::cout << "圓的面積: " << shape_ptr->area() << std::endl;
shape_ptr = new Rectangle();
std::cout << "矩形的面積: " << shape_ptr->area() << std::endl;
// 釋放內(nèi)存
delete shape_ptr;
return 0;
}
在這個(gè)示例中,我們定義了一個(gè)名為Shape
的基類,其中包含一個(gè)虛函數(shù)area()
。然后,我們定義了兩個(gè)派生類Circle
和Rectangle
,分別表示圓形和矩形。這兩個(gè)派生類都重寫了基類中的area()
函數(shù),以實(shí)現(xiàn)各自的面積計(jì)算。
在main()
函數(shù)中,我們使用基類指針shape_ptr
分別指向Circle
和Rectangle
對(duì)象,并通過基類指針調(diào)用area()
函數(shù)。由于area()
是虛函數(shù),因此會(huì)根據(jù)實(shí)際對(duì)象類型調(diào)用相應(yīng)的派生類實(shí)現(xiàn)。最后,我們輸出計(jì)算得到的面積。