zoukankan      html  css  js  c++  java
  • C++多态

    一、多态

    1.多态是指:调用成员函数时,会根据调用函数的对象的类型来执行不同的函数

    2.用到多态的情况:当类之间是通过继承关联时

    举例:

    #include <iostream> 
    using namespace std;
     
    class Shape {
       protected:
          int width, height;
       public:
          Shape( int a=0, int b=0)
          {
             width = a;
             height = b;
          }
          virtual int area()
          {
             cout << "Parent class area :" <<endl;
             return 0;
          }
    };
    class Rectangle: public Shape{
       public:
          Rectangle( int a=0, int b=0):Shape(a, b) { }
          int area ()
          { 
             cout << "Rectangle class area :" <<endl;
             return (width * height); 
          }
    };
    class Triangle: public Shape{
       public:
          Triangle( int a=0, int b=0):Shape(a, b) { }
          int area ()
          { 
             cout << "Triangle class area :" <<endl;
             return (width * height / 2); 
          }
    };
    // 程序的主函数
    int main( )
    {
       Shape *shape;
       Rectangle rec(10,7);
       Triangle  tri(10,5);
     
       // 存储矩形的地址
       shape = &rec;
       // 调用矩形的求面积函数 area
       shape->area();
     
       // 存储三角形的地址
       shape = &tri;
       // 调用三角形的求面积函数 area
       shape->area();
       
       return 0;
    }

    当编译和执行前面的实例代码时,它会产生以下结果:

    Rectangle class area :
    Triangle class area :

    二、虚函数

    1.定义

    虚函数是在基类中使用关键字 virtual 声明的函数

    2.作用

    在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数

    3.静态多态、动态多态

    我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定;

    当调用函数被编译器设置为基类中的版本,就是所谓的静态多态,或静态链接 ,函数调用在程序执行前就准备好了

    例如,在上例中,如果将 shape 类中的 virtual 去掉

    它会产生下列结果:

    Parent class area :
    Parent class area :

    即为,静态多态。

  • 相关阅读:
    servlet的提交
    servlet的doPost 和doGet和web文件结构
    helloServlet
    捕鱼达人
    The 2018 ACM-ICPC China JiangSu Provincial Programming Contest I. T-shirt
    ACM-ICPC 2017 Asia Urumqi A. Coins
    Nordic Collegiate Programming Contest 2015​ B. Bell Ringing
    变量
    hiho 1050 树的直径
    ACM-ICPC 2017 Asia Urumqi G. The Mountain
  • 原文地址:https://www.cnblogs.com/wy0526/p/15719440.html
Copyright © 2011-2022 走看看