📅  最后修改于: 2023-12-03 15:13:45.312000             🧑  作者: Mango
在C++中,虚函数是一种能够被重写的函数。它允许在基类中定义一个函数,然后在派生类中重新定义该函数以适应不同的需求。这是实现多态(Polymorphism)的关键之一。
虚函数的声明和定义相对简单。可以将虚函数声明为以关键字virtual
开头的函数,然后随后将其定义。
class Shape {
public:
virtual void area() {
cout << "This is the base class area" << endl;
}
};
上面的代码段声明了一个名为Shape的类,并在其中定义了一个名为area的虚函数。在派生类中我们可以重新定义该函数以适应具体的业务需求。
C++程序员通常使用关键字virtual
来使程序在运行时(动态地)调用有效的函数。当程序使用基类的指针或引用调用虚函数时,会调用与指向的对象的实际类匹配的函数。
Shape *shape;
Rectangle rec(10,7);
Triangle tri(10,5);
// 存储矩形的地址
shape = &rec;
// 调用矩形的求面积函数 area
shape->area();
// 存储三角形的地址
shape = &tri;
// 调用三角形的求面积函数 area
shape->area();
上面的代码在运行时动态地调用Rectangle或Triangle类中的实际函数(根据指针或引用指向的实际对象确定)。
C++还支持“纯虚函数”,它是一种抽象函数。纯虚函数不需要实现(没有函数体),但它要求每个派生类都定义并提供实现。定义纯虚函数需要在函数声明之前加上 = 0
,例如:
class Shape {
public:
// 纯虚函数
virtual void area() = 0;
};
如果派生类未定义或者实现了纯虚函数,则该派生类也是抽象类。
在C++编程中,虚函数是一种很有用的特性,它为多态提供了基础。通过使用虚函数,开发人员可以在C++程序中实现更加灵活的代码,提供更高的抽象程度。纯虚函数的使用可以在C++程序中定义抽象基类,使得派生类必须基于父类实现特定的行为,从而使程序设计更加清晰。