中年|C/C++编程笔记:C++入门知识,C++多态性和虚函数解析
本篇要学习的内容和知识结构概览
本文插图
多态性 编译时的多态性称为静态联编. 当调用重载函数时, 在编译期就确定下来调用哪个函数.
运行时的多态性称为动态联编. 在运行时才能确定调用哪个函数, 由虚函数来支持.
静态联编中的赋值兼容性及名字支配规律
派生一个类的原因并非总是为了添加新的成员或成员函数, 有时是为了重新定义基类的成员函数 。
本文插图
本文插图
在派生类有同名函数的情况下
Point * pPoint // 声明的基类指针只能指向基类
Circle * pCircle // 声明的派生类指针只能指向派生类
如果派生类没有基类的同名函数, 派生类的指针才根据继承原则调用基类的函数
虚函数 一旦定义了虚函数, 该基类的派生类中的同名函数也自动成为虚函数.
虚函数的定义 用关键字virtual来声明一个虚函数, 虚函数只能是类中的一个成员函数, 不能是静态成员.
像这样:
本文插图
虚函数实现多态性的条件 【中年|C/C++编程笔记:C++入门知识,C++多态性和虚函数解析】关键字virtual告诉编译器调用虚函数进行动态联编.
使用虚函数不一定产生多态性, 也不一定使用动态联编.
在调用中对虚函数使用成员名限定, 可以强制编译器对该函数使用静态联编.
本文插图
产生运行多态性, 也就是动态联编有3个前提
(1)类之间的继承关系满足赋值兼容性规则
(2)改写了同名虚函数
(3)根据赋值兼容性规则使用指针(或引用)
像这样:
本文插图
本文插图
纯虚函数与抽象类 在基类中不给虚函数一个有意义的定义, 可以说明为纯虚函数, 将定义留给派生类去做
像这样:
抽象类:包含有纯虚函数的类称为抽象类. 一个抽象类至少有一个纯虚函数, 一个抽象类只能作为基类来派生新类, 不能说明抽象类的对象.
本文插图
注意
空虚函数定义 virtual void area() {}
纯虚函数定义 virtual void area() = 0
纯虚函数的派生类仍是抽象类. 如果派生类中给出了基类所有纯虚函数的实现, 则该派生类不再是抽象类
类族 如果通过同一个基类派生一系列的类, 则将这些类总称为类族.
像这样:
本文插图
本文插图
多重继承与虚函数
多重继承可以被视为多个单一继承的组合 。
本文插图
总结 C++有两种多态性, 一种是编译时多态性, 也叫静态联编 另一种是运行时多态性, 也叫动态联编. 这大大提高了我们解决问题的丰富性. 可能也是C++长久不衰的魅力所在吧! 我会继续深入学习C++, 继续挖掘语言的本质!
自学C/C++编程难度很大 , 不妨和一些志同道合的小伙伴一起学习成长!
C语言C++编程学习交流圈子 , 关注+私信【C/C++编程】微信公众号:C语言编程学习基地
有一些源码和资料分享 , 欢迎转行也学习编程的伙伴 , 和大家一起交流成长会比自己琢磨更快哦!
本文插图
声明:转载此文是出于传递更多信息之目的 。 若有来源标注错误或侵犯了您的合法权益 , 请作者持权属证明与本网联系 , 我们将及时更正、删除 , 谢谢 。邮箱地址:newmedia@xxcb.cn
推荐阅读
- 减肥|JAMA:减肥要趁早,25岁就该开始预防中年期肥胖
- 人到中年,常吃3种食物,健脑益智,美白抗衰,保护心血管
- 中年|《中国新说唱2020》全民搞哈开团日
- 中年|点燃创新之火,合力解除“缺芯”之痛
- 中年|画像“标签”生产实操指南(二)之产出清晰的标签数据需求
- 中年|从原型模式到浅拷贝和深拷贝
- 中年|宁愿2450亿打水漂,也不使用华为设备?如今却沦为“国际笑话”
- 中年|Angular export class AppComponent里定义变量的实现原理
- 中年|社交网络中的信息交流效率 社交网络并非越大越好
- 女人|疫情没过,大马中年妇女跟老公数次去夜店被捕:担心他找其他女人
