21xrx.com
2024-09-19 09:05:31 Thursday
登录
文章检索 我的文章 写文章
C++ 重写函数——进一步掌握多态特性
2023-07-14 13:47:39 深夜i     --     --
C++ 重写函数 多态特性 掌握 进一步

C++ 作为一种面向对象的编程语言,拥有多态、封装和继承等丰富的特性。其中多态是面向对象编程的精髓之一,其可以让程序在运行时动态地选择哪个函数去调用。一个函数可以有多个实现,这些不同的实现都有相同的名称,但是其输入和输出以及实现方法可以不同。这就是函数重写(Override)的概念。

重写函数可以让子类重写父类的函数,以实现多态特性。在 C++ 中,我们使用虚函数(Virtual Function)来实现函数的重写。定义一个函数为虚函数的方式是在父类函数前添加 virtual 关键字。重写父类函数的方式是在子类定义中重新声明该虚函数。当调用被重写的函数时,程序就会在运行时判断该函数属于哪一个类,并且调用正确的版本。

在实现重写函数时,我们需要注意几个关键点。首先,子类重写时必须保持函数原始的返回类型、函数名、参数列表以及访问控制修饰符不变,否则程序会编译失败。其次,子类重写的函数必须与父类的虚函数名称相同。最后,子类的函数必须是虚函数,即必须在函数声明中添加 virtual 关键字。只有这样,当子类的对象调用该函数时,程序才会动态地选择调用正确的版本。

下面是一个简单的例子:


#include <iostream>

using namespace std;

class Shape {

  protected:

   int width, height;

  public:

   virtual int area()

     cout << "Parent class area :" << endl;

     return 0;

   

};

class Rectangle: public Shape {

  public:

   int area () {

     cout << "Rectangle class area :" << endl;

     return (width * height);

   }

};

class Triangle: public Shape {

  public:

   int area () {

     cout << "Triangle class area :" << endl;

     return (width * height / 2);

   }

};

int main() {

  Shape *shape;

  Rectangle rec;

  Triangle tri;

  shape = &rec;

  shape->area();

  shape = &tri;

  shape->area();

 

  return 0;

}

在上面的代码中,我们定义了一个 Shape 类和两个子类 Rectangle 和 Triangle。在 Shape 类中,我们使用 virtual 关键字定义了一个名为 area() 的虚函数。在 Rectangle 和 Triangle 类中,它们重写了 area() 函数,并使用不同的计算方式计算面积。在程序中,我们创建了一个指向 Shape 对象的指针 shape,并将其分别指向 Rectangle 和 Triangle 对象。当我们调用 shape->area() 时,程序会动态地选择调用正确的版本。

总之,函数重写是 C++ 中多态特性的一种体现。通过使用虚函数和重写函数,我们可以让程序更加灵活和可扩展。在实践中,我们通常将父类定义为抽象类,这样可以防止其被实例化,并且强制子类去重写其虚函数。通过掌握重写函数的技巧,我们可以更好地利用 C++ 的面向对象特性,提高代码的重用性和可维护性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复