美文网首页C/C++学习笔记
1.0 C++远征:多态的概述与虚函数

1.0 C++远征:多态的概述与虚函数

作者: 青_阳 | 来源:发表于2016-11-18 18:31 被阅读2次

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

[TOC]

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;
}

相关文章

  • 1.0 C++远征:多态的概述与虚函数

    1-1多态的概述与虚函数 [TOC] 1.什么是多态? 指相同对象收到不同消息或不同对象收到相同消息时产生不同的动...

  • 慕课网-C++远征之多态篇(中)-学习笔记

    c++远征之多态篇 纯虚函数 & 抽象类 例子: 纯虚函数: 没有函数体 直接等于0 在虚函数表中直接写为0, 包...

  • 查漏补缺

    C++虚函数: 多态: 静态多态(重载)、动态多态(虚函数) 虚函数 虚函数表:编译器为每个类创建了一个虚函数表...

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • 2020-07-06----《C++类的学习》

    函数重载:同名不同参。 C++类的特点:封装、继承、多态。 //多态与函数重载是啥关系? 虚函数:和软件架构相关 ...

  • C++ 虚函数表剖析

    一、概述 为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍...

  • C++ 虚函数表剖析

    一、概述 为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍...

  • GeekBand-C++面向对象高级编程(下)-Week2

    对象模型:虚函数表(vtbl)与虚表指针(vptr) 我们知道,C++中,可以通过虚函数来实现多态性,而虚函数是通...

  • C++虚函数注意事项以及构成多态的条件

    C++ 虚函数对于多态具有决定性的作用,有虚函数才能构成多态。 虚函数注意事项 只需要在虚函数的声明处加上 vir...

  • 语法

    virtual 1.virtual声明的函数实现多态就是通用的多态实现 2.纯虚函数C++的纯虚函数用于表示一个类...

网友评论

    本文标题:1.0 C++远征:多态的概述与虚函数

    本文链接:https://www.haomeiwen.com/subject/beqspttx.html