zoukankan      html  css  js  c++  java
  • 1.0 C++远征:多态的概述与虚函数

    1-1多态的概述与虚函数

    1.什么是多态?

    指相同对象收到不同消息或不同对象收到相同消息时产生不同的动作。

    2.多态的分类

    (1)静态多态

    ​ 又叫早绑定

    一个类中互为重载的函数的情况。

    // 静态多态,又叫早绑定。
    // 程序在运行之前——在编译阶段已经能确定调用哪个方法(函数重载,通过参数的不同)。
    // Rect.cpp
    class Rect {
      public:
      	int calcArea(int width);
      	int calcArea(int width, int height);
    }
    

    (2)动态多态

    ​ 又叫晚绑定

    必须以"封装"和“继承”为基础。

    虚函数为了解决动态多态问题而产生的。

    // 动态多态,又叫晚绑定。
    // 程序在运行时才能确定要调用类的哪个方法。
    // Shape.cpp
    class Shape {	// 基类
      public:
      	virtual double calcArea(){	// 虚函数
          cout << "calcArea" << endl;
          return 0.0;
      	}
    };
    
    // Circle.cpp
    class Circle : public Shape {	// 派生类
      public:
      	Circle(double r);
      	virtual double calcArea(){	// 虚函数
          return 3.14 * m_dR * m_dR;
      	}
      private:
      	double m_dR;
    };
    
    // Rect.cpp
    class Rect : public Shape {	// 派生类
      public:
      	Rect(double width, double height);
      	virtual double clacArea(){	// 虚函数
          return m_dWidth * m_dHeight;
      	}
      private:
      	double m_dWidth;
      	double m_dHeight;
    };
    
    // main.cpp
    int main(){
      Shape *shape1 = new Circle(4.0);
      Shape *shape2 = new Rect(3.0, 5.0);
      
      // 程序在运行时才能确定要调用类的哪个方法。
      shape1->calcArea();
      shape2->calcArea();
      
      delete shape1;
      shape1 = NULL;
      delete shape2;
      shape2 = NULL;
      
      return 0;
    }
    
  • 相关阅读:
    Hufman编码实现运用1 (原理不描述)
    E
    1178: [Apio2009]CONVENTION会议中心
    1071: [SCOI2007]组队
    #333. 【NOIP2017】宝藏
    CF 96 D. Volleyball
    CF 987 D. Fair
    qbxt的题:运
    qbxt的题:找一个三元环
    4361: isn
  • 原文地址:https://www.cnblogs.com/xiaoqingyang/p/6077295.html
Copyright © 2011-2022 走看看