物联网
您现在所在的位置:首页>企业动态>物联网

如何理解C++中的多态?

编辑:学到牛牛IT培训    发布日期: 2023-03-30 10:13:00  

C++中的多态是面向对象程序设计中的一种重要概念,它允许不同类型的对象对相同的消息做出不同的响应。多态是通过派生类继承基类的虚函数来实现的。


1680139128143.jpg


在C++中,多态有两种形式:静态多态和动态多态。其中,静态多态是指函数重载,而动态多态则是指虚函数实现的运行时多态。


静态多态


静态多态是指函数的重载,它可以使得一个函数名可以代表不同的功能。这样,在编译时就会根据调用参数的不同来选择正确的函数进行调用。


例如,我们可以定义一个名为 sum 的函数,它可以接收不同数量和类型的参数,从而实现加法操作。通过使用函数重载,可以重复使用函数名 sum,避免了代码冗余。


int sum(int a, int b) { return a + b; }

double sum(double a, double b) { return a + b; }

动态多态


动态多态是指利用虚函数实现的运行时多态。在C++中,可将基类指针或引用指向派生类对象,并调用其虚函数,从而实现运行时动态绑定。这种方式下,程序会根据对象的实际类型来选择正确的函数进行调用,从而实现多态。


class Shape {

   public:

      virtual double getArea() = 0;

};


class Rectangle: public Shape {

   public:

      double getArea() { return width * height; }

   private:

      int width;

      int height;

};


class Triangle: public Shape {

   public:

      double getArea() { return 0.5 * base * height; }

   private:

      int base;

      int height;

};


int main() {

    Shape* shape = new Rectangle();

    std::cout << "Area of Rectangle is: " << shape->getArea() << std::endl;


    shape = new Triangle();

    std::cout << "Area of Triangle is: " << shape->getArea() << std::endl;


    return 0;

}

在上面的示例中,我们定义了一个基类 Shape,其中包含一个纯虚函数 getArea()。然后,我们定义了两个派生类 Rectangle 和 Triangle,它们分别实现了 getArea() 函数。


在 main() 函数中,我们首先将一个基类指针指向一个 Rectangle 对象,并调用其虚函数 getArea(),输出矩形的面积。然后,我们将同一个基类指针指向一个 Triangle 对象,并再次调用 getArea() 函数,输出三角形的面积。由于 getArea() 是虚函数,所以程序会根据对象的实际类型选择正确的函数进行调用,从而实现动态多态。


免费试学
课程好不好,不如实地听一听

封闭学习

2

1

联系我们

电话:028-61775817

邮箱:1572396657@qq.com

地址:成都市金牛区西城国际A座8楼

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    扫一扫,免费咨询

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
    物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

    微信公众号

  • 物联网_物联网专题新闻_物联网IOT资讯-学到牛牛
物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

学一流技术,找高薪工作

物联网_物联网专题新闻_物联网IOT资讯-学到牛牛

7-24小时服务热线:

028-61775817

版权声明 网站地图

蜀ICP备2021001672号

课程问题轻松问