21xrx.com
2024-12-22 23:32:01 Sunday
登录
文章检索 我的文章 写文章
C++中如何实现多态性
2023-07-02 00:33:29 深夜i     --     --
C++ 多态性 实现

在C++中,多态性是一个非常重要的概念,它允许以不同的方式处理不同类型的对象。实现多态性的一个重要机制是虚函数。下面将介绍在C++中如何实现多态性。

首先,定义一个基类。基类应该有一个或多个虚函数,至少其中一个函数将通过派生类进行重写。虚函数是通过在函数声明前加上关键字“virtual”来定义的。例如,假设我们要定义一个基类Shape,它有一个名为area()的虚函数来计算面积,代码如下所示:


class Shape {

  protected:

   double width, height;

 

  public:

   Shape( double a = 0, double b = 0)

     width = a;

     height = b;

   

   virtual double area()

     cout << "父类中的area函数" << endl;

     return 0;

   

};

注意,这个函数的实现只是打印一条消息,并返回0。这是因为在基类Shape中,无法确定如何计算它的面积,只有派生类才知道如何。这就是多态性起作用的地方。

然后,我们定义一个派生类Rectangle,并重载它的area()函数以计算矩形的面积。代码如下所示:


class Rectangle: public Shape {

  public:

   Rectangle( double a = 0, double b = 0):Shape(a, b) { }

   double area () {

     cout << "矩形的面积为 : " << (width * height) << endl;

     return (width * height);

   }

};

这个派生类重载了Shape类中的area()函数,并用自己的计算方法覆盖了基类函数的实现。

最后,我们可以通过调用基类的指针来实现多态性。我们可以创建一个Shape类的指针,该指针可以指向一个Shape类的对象或其派生类的对象。由于Shape类中的area()函数是虚函数,因此当我们调用任何派生类的area()函数时,都会根据对象类型调用相应的函数。

代码如下所示:


int main( ) {

  Shape *shape;

  Rectangle rec(10,7);

  shape = &rec;

  shape->area(); // 动态调用

  return 0;

}

上述代码中,我们定义了一个指向Shape类的指针,我们将其初始化为指向Rectangle类的对象。然后,我们调用area()函数。由于area()函数是虚函数,并且rec对象是Rectangle类的对象,因此将调用Rectangle类中的area()函数,并输出矩形的面积。

在C++中,使用虚函数和指向基类的指针或引用来实现多态性是一种非常常见的方式。它提供了一个强大而灵活的机制,可以根据不同对象的类型来选择相应的操作,从而实现了多种不同的行为。

  
  

评论区

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