多态一种事物多种形态

多态:一种事物多种形态

C++多态:调用一个函数名,传入不同的参数,执行不同的函数体

函数重载就是一种多态的体现!

  1. 静态多态和动态多态

什么静态:

   静态链接(库)--在编译阶段会将静态库链接到可执行文件中

什么是动态:

   动态链接(库)--在运行阶段才会将动态库链接到可执行文件中

总结: 静态(编译阶段)和动态(运行阶段)的区别: 链接的时刻不同

静态多态(静态绑定):调用一个函数,在编译阶段就知道应该执行哪一个函数体

    体现在函数重载

动态多态(动态绑定):调用一个函数,在运行阶段才知道应该执行哪一个函数体

    体现在继承+虚函数中

绑定:就是函数调用与函数体进行了关联

总结实现动态多态的条件:

  1. 一定要继承,一个父类多个子类
  2. 父类要中要有虚函数,并且子类要重写这个虚函数

(有加virtual就是重写—覆盖,没有加virtual是重定义—隐藏)

  1. 通过父类的指针或者是引用去操作子类对象,然后调用虚函数就会触发这个动态的多态!

隐藏:是重定义

覆盖:是重写

  1. 多态存在的问题

为什么在设计类的时候,建议把父类的析构函数写成虚函数呢?

因为如果用父类的指针去操作子类对象,使用delete去释放父类对象的时候,不会执行子类的析构函数,如果在子类的构造中有用new的方式动态的开空间,就没法做释放的动作,就会造成内存泄漏!

为什么不执行子类的析构函数,就会造成内存泄漏呢?

    析构函数的作用是资源释放,如果有在子类构造中通过new或者malloc动态分配内存空间,势必要在子类的析构函数中通过delete或者free去释放对应堆区空间;没有执行子类的析构,空间不会被释放,就会造成内存泄漏!

  1. 重定义、重写、重载的区别

重载:一定是在同一个作用域内,函数名相同,参数不同,与返回值类型无关的一组函数!参数不同:参数个数、类型、顺序不同

重定义隐藏:继承关系   子类写了一个和父类同名的函数,与参数这些无关

重写覆盖:继承关系     子类重写了上父类的虚函数,必须保证 函数类型、函数名、参数是一模一样

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值