📜  C ++ |虚函数|问题1(1)

📅  最后修改于: 2023-12-03 15:13:45.312000             🧑  作者: Mango

C++ |虚函数|问题1

在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++程序中定义抽象基类,使得派生类必须基于父类实现特定的行为,从而使程序设计更加清晰。