C++核心编程 17多态

一、概念:调用同名函数,由于上下文的不同会有不同实现的一种机制。

二、种类:

1、静态多态----函数重载、运算符重载 动态多态----父子间继承+虚函数
2、动态多态的满足条件:
  1. 父类中有虚函数
  2. 子类重写父类中的虚函数
  3. 父类指针或引用指向子类对象

三、纯虚函数和抽象类

  1. 纯虚函数语法:virtual+函数类型+函数名()=0; eg:virtual void func()=0;
  2. 如果类中有了纯虚函数,那么这个类也叫抽象类。
  3. 抽象类无法实例化对象。
  4. 继承抽象类的子类,必须重写父类中的纯虚函数,否则子类也是抽象类
四、虚析构与纯虚析构
  1. 如果子类中有创建在堆中的属性,那么多态情况下,不会调用子类的析构代码,就会导致内存泄漏。
  2. 解决方案:理由虚析构或者纯虚析构。
  3. 虚析构:在析构函数前加virtual关键字。
  4. 纯虚析构语法:virtual+~函数名()=0; eg: virtual ~Student()=0;
五、向上向下类型转换

1.父类转子类 向下类型转化 不安全。 原因:子类继承父类,子类的空间比父类大,那么从父类转子类的时候,指针可能会指向,子类比父类大的那一部分,会导致指针越界
2.子类转父类 向上类型转化 安全。
3.如果发生多态,那么上述均为安全。
发生多态,父类指针指向子类对象,即为父类分配一个子类大小的空间。不管指针怎么指向,都是不会越界。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值