C++:多态性与虚函数

多态性在生活中的体现

  • 煤气炉是炉子中的一种
  • 微波炉也是炉子中的一种
  • 煤球炉是炉子中的一种
  • 他们都可以煮东西
  • 微波炉可以煮鸡蛋
    (1)打开微波炉的门
    (2)放入鸡蛋
    (3)设定时间
    (4)设定微波强度
    (5)关上门
    (6)启动
  • 煤气炉可以煮鸡蛋
    (1)鸡蛋放到小锅里
    (2)把小锅放到煤气炉上
    (3)打开煤气罐阀门
    (4)电子点火
    (5)设定火力强度
    (6)盖上锅盖
    (7)等待鸡蛋熟

多态性在C++中的体现

  • 多态性是使用不同的对象的相同方法时能产生不同动作
  • C++支持两种多态性,一种是编译时的多态性,另一种是运行时的多态性
  • 在面向对象的系统中,有两种编译方式,及早期联编和滞后联编
  • 早期联编是指系统在编译时就决定如何确定某一动作
  • 滞后联编是指系统在运行时动态确定某一动作,也称为动态联编

编译时的多态性

  • 编译时的多态性是通过重载函数来实现的。重载函数有下述两种方式:
    (1)在一个类中说明的重载
    (2)基类成员函数在派生类中的重载
  • 在一个类中说明的重载函数之间,靠所带的参数个数或参数类型的不同加以区分。在编译时系统就可以根据参数上的差异来区分这些函数
  • 基类成员函数在派生类中的重载:
    (1)一种是参数有所差别的重载
    (2)另一种是函数所带的参数相同,只是它们属于不同层的类

运行时的多态性

  • 在C++中,运行时的多态性是用虚函数来实现的

虚函数

  • 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数
  • 虚函数是在基类中冠以关键字 virtual 的成员函数
  • 在派生类重定义虚函数时必须有相同的函数原型,包括返回类型,函数名、参数个数、参数类型的顺序必须相同
  • 虚函数必须是类的成员函数。不能为全局函数,也不能为静态函数
  • 析构函数可以是虚函数,但构造函数不能为虚函数

纯虚函数

  • 纯虚函数的意思是:我是一个抽象类!
  • 拥有纯虚函数的类是抽象类

抽象类

  • 如果一个类中至少有一个纯虚函数,则该类称为抽象类
  • 抽象类只能用作其它类的基类,不能建立抽象类的对象
  • 抽象类不能用作参数类型,函数返回类型或显式转换的类型
  • 可以声明指向抽象类的指针和引用,指针可以指向它的派生类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值