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

如何理解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() 是虚函数,所以程序会根据对象的实际类型选择正确的函数进行调用,从而实现动态多态。


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

推荐阅读

  • Qt开发者的AI进化论:当传统GUI框架遇见智能时代

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • QT能被应用在人工智能领域有哪些应用

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • 什么学校学计算机编程比较好

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • 计算机专业的就业难度怎么样?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

封闭学习

2

1

18180749853

蜀ICP备2021001672号

在线咨询 免费试听VIP课程