📅  最后修改于: 2023-12-03 14:39:54.227000             🧑  作者: Mango
在C++中,虚函数是一种非常有用的概念。它使得我们能够在派生类中重写基类的函数,从而可以实现多态性。本文将介绍虚函数的相关概念,并提供一个程序示例。
虚函数是一个在基类中声明的函数,带有关键字 virtual
。它可以在派生类中重写,在运行时根据对象的实际类型来调用不同的函数。
例如,我们有一个基类 Shape
和两个派生类 Rectangle
和 Triangle
。 Shape
中声明了虚函数 getArea()
。在派生类中,我们可以对此函数进行重写,例如:
class Shape {
public:
virtual double getArea() {
return 0;
}
};
class Rectangle : public Shape {
public:
double getArea() override {
return length * width;
}
private:
double length;
double width;
};
class Triangle : public Shape {
public:
double getArea() override {
return 0.5 * base * height;
}
private:
double base;
double height;
};
这里,Shape
中声明的 getArea()
函数是虚函数,它被派生类 Rectangle
和 Triangle
分别重写了。
当我们调用一个虚函数时,编译器并不知道要调用的确切函数。相反,它将控制权交给程序在运行时决定要调用哪个函数。例如,考虑下面的代码片段:
Shape* shape_ptr;
Rectangle rect;
shape_ptr = ▭
double area = shape_ptr->getArea();
这里,我们首先定义了一个基类指针 shape_ptr
,然后将一个派生类 Rectangle
的实例的地址赋给它。接下来,我们调用虚函数 getArea()
,由于 shape_ptr
指向的实际对象是 Rectangle
,所以调用 Rectangle
中的 getArea()
函数。
虚函数的关键字是 virtual
。当我们在基类中声明函数时使用 virtual
关键字时,它告诉编译器我们希望将该函数标记为虚函数。例如:
class Shape {
public:
virtual double getArea() {
return 0;
}
};
派生类中的虚函数不需要使用 virtual
关键字,但是建议使用 override
关键字标注,以便更清楚地表明我们正在重写基类中的虚函数。例如:
class Rectangle : public Shape {
public:
double getArea() override {
return length * width;
}
private:
double length;
double width;
};
下面是一个示例程序,它演示一个基类和两个派生类,基类中包含虚函数。
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getArea() {
return 0;
}
};
class Rectangle : public Shape {
public:
Rectangle(double length, double width) : length(length), width(width) {};
double getArea() override {
return length * width;
}
private:
double length;
double width;
};
class Triangle : public Shape {
public:
Triangle(double base, double height) : base(base), height(height) {};
double getArea() override {
return 0.5 * base * height;
}
private:
double base;
double height;
};
int main() {
Shape* shape_ptr;
Rectangle rect(5, 10);
Triangle tri(5, 10);
shape_ptr = ▭
cout << "Rectangle Area: " << shape_ptr->getArea() << endl;
shape_ptr = &tri;
cout << "Triangle Area: " << shape_ptr->getArea() << endl;
return 0;
}
运行结果如下:
Rectangle Area: 50
Triangle Area: 25
虚函数是C++中非常强大和灵活的概念,它可以帮助我们实现多态性并方便地重用代码。本文提供了一个虚函数的简要介绍,并提供了一个示例程序,它演示了虚函数的基本用法。