c 结构体在声明时赋值_C/C++编程笔记:C++入门知识,C++多态性和虚函数解析

本篇要学习的内容和知识结构概览

1efdaadb695e98885f16774d2a0cf2c5.png

多态性

编译时的多态性称为静态联编. 当调用重载函数时, 在编译期就确定下来调用哪个函数.

运行时的多态性称为动态联编. 在运行时才能确定调用哪个函数, 由虚函数来支持.

静态联编中的赋值兼容性及名字支配规律

派生一个类的原因并非总是为了添加新的成员或成员函数, 有时是为了重新定义基类的成员函数。

307662d654781ee983dccbcd2de640f5.png
b3e1f249c88ee044d57321784406a520.png

在派生类有同名函数的情况下

Point * pPoint; // 声明的基类指针只能指向基类

Circle * pCircle // 声明的派生类指针只能指向派生类

如果派生类没有基类的同名函数, 派生类的指针才根据继承原则调用基类的函数

虚函数

一旦定义了虚函数, 该基类的派生类中的同名函数也自动成为虚函数.

虚函数的定义

用关键字virtual来声明一个虚函数, 虚函数只能是类中的一个成员函数, 不能是静态成员.

像这样:

29c7f31320833b6b0bf2865a5dd53d27.png

虚函数实现多态性的条件

关键字virtual告诉编译器调用虚函数进行动态联编.

使用虚函数不一定产生多态性, 也不一定使用动态联编.

在调用中对虚函数使用成员名限定, 可以强制编译器对该函数使用静态联编.

6f27b3058158becbd797397ab632ef57.gif

产生运行多态性, 也就是动态联编有3个前提

(1)类之间的继承关系满足赋值兼容性规则

(2)改写了同名虚函数

(3)根据赋值兼容性规则使用指针(或引用)

像这样:

5a4789deb12a255294e711950c4aa57a.png
f478ba9fb3e78116aa7a96b774838f9e.png

纯虚函数与抽象类

在基类中不给虚函数一个有意义的定义, 可以说明为纯虚函数, 将定义留给派生类去做

像这样:

388c82dd7e1653ce19a0592e9c242a93.png

抽象类:包含有纯虚函数的类称为抽象类. 一个抽象类至少有一个纯虚函数, 一个抽象类只能作为基类来派生新类, 不能说明抽象类的对象.

81cf1bdcf43e98ae1e7736a5b06a41d6.png

注意

空虚函数定义 virtual void area() {}

纯虚函数定义 virtual void area() = 0;

纯虚函数的派生类仍是抽象类. 如果派生类中给出了基类所有纯虚函数的实现, 则该派生类不再是抽象类

类族

如果通过同一个基类派生一系列的类, 则将这些类总称为类族.

像这样:

ae4c0a3c6eb59cda6cb365376992eefe.png
3e21fca46686e90313144981040639f2.png

多重继承与虚函数

多重继承可以被视为多个单一继承的组合。

8f2cc9b3a9a6ffc8260baedb79eddb29.png

总结

C++有两种多态性, 一种是编译时多态性, 也叫静态联编; 另一种是运行时多态性, 也叫动态联编. 这大大提高了我们解决问题的丰富性. 可能也是C++长久不衰的魅力所在吧! 我会继续深入学习C++, 继续挖掘语言的本质!


自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!

C语言C++编程学习交流圈子,关注+私信【C/C++编程】微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

8e58306ac959e81acc0b06135626c364.png
06fc050892acab9d2a0661ad0b01cc0e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】陕西师范大学200411 数学建模 作业(专升本)

《数学建模》作业 计算题1. 求差分方程 的初值解。 2. 求差分方程 的初值解。 二、1.某储蓄所每天的营业时间是上午9:00到下午5:00。根据经验,每天不同时间段所需要的服务员数量如下: 储蓄所可以雇佣全时和半时两类服务员。全时服…

【渝粤题库】陕西师范大学200781 数据库原理及应用 作业

《数据库原理及应用》作业 一、选择题 1.在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。在这几个阶段中,数据独立性最高的是____阶段。 数据库系统 B.文件系统 C.人工管理 D&#xf…

concurrent vs. simultaneous

Both the words mean “occurring at the same time”, but “concurrent” represents the events that occur over a period of time whereas “simultaneous” represents the events that occur at a point in time. https://www.perfmatrix.com/concurrent-users-vs-simul…

使用Spring Boot和GraphQL构建安全的API

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 GraphQL是Facebook在2012年开发的一种数据查询语言,用于解决REST API和传…

python flask 上传下载 api_python – 使用Flask上传和下载文件

PythonAnywhere dev这里.这是一个关于Flask和Web开发的一个很好的问题,而不是我们的系统特定的,所以我会尝试给出一个没有任何特定的通用答案:-)有一些事情我需要知道,给出一个明确的答案你的问题,所以我首先列出我所做的假设 – 如果我错了任何一个,给我一个评论我会适当地更新…

【渝粤题库】陕西师范大学201841 比较教育学 作业(专升本)

《比较教育学》作业 单选题 1、比较教育学界人们常说的“比较教育之父”是( )。 A.阿尔特巴赫 B. 康德尔 C. 萨德勒 D. 朱利安 2、结构功能主义对比较教育的影响,主要表现为比较教育注重对( )之间的关系进行分析和研究。 A、教育与民族特性 B、教育与民族传统 C、教…

visio 绘图矢量图素材网站

visio 绘图矢量图素材网站 visio是个绘图的好工具,可是自带图形元素有限,没有还要自己画。 推荐几个矢量图形素材库,里边有很多图形,很方便的导入到visio中,放大也不失真。 https://www.iconfont.cn/ https://www.st…

【渝粤题库】陕西师范大学202231财务管理Ⅰ 作业(高起专)

《财务管理》作业 一、名词解释 1、财务管理的目标 2、销售百分比法 3、最佳资本结构 4、企业价值最大化: 5、优先股股票: 6、财务风险: 7、年金: 8、债券: 9、直接投资: 10、筹资方式 11、财务杠杆 12、蓝…

python找答案__学小易找答案

【单选题】下列各酸中为一元酸的是( )。 (5.0分)【单选题】下列物质中,还原能力最强的 是( )。 (5.0分)【简答题】根据提供胡”管理投标书.docx“文档进行排版,实现页眉和页脚、目录的录入,管理投标书排版后胡效果如图所示。6-20.【简答题】python代码连接数库过程【单选题】下…

【渝粤题库】陕西师范大学209005课堂教学艺术作业(高起专)

单选题 1、教例:一位数学教师讲授例题时,因板书有误导致最终答案不符。他意识到出了差错,于是,不谎不忙地问了一句:“同学们,这个答案合理吗?”一位同学回答:“不合理。”教师追问:…

LaTeX的编译速度优化方案

1 运行字体 如果是卡在 eu1lmr.fd 的话,是因为 XeLaTeX 在定位字体。 用管理员运行 fc-cache -fv一般能够解决。 其它方法: https://www.zhihu.com/question/53981204 https://blog.csdn.net/weixinhum/article/details/121056868 2 优化方案 2.1 …

Oracle发布Java 8

Oracle已决定在3月18日发布升级到JDK(Java开发工具包)8的消息,尽管新版本可能会带来一些错误(如Full speed所介绍的那样) :Oracle会在3月发布Java 8,即使存在错误 。 Oracle JDK 8发行经理Math…

【渝粤题库】陕西师范大学210015幼儿园社会教育作业(高起专)

《幼儿园社会教育》作业 一、单选题 1.谁创立了发生认识论并提出了儿童认知发展阶段论() A.班杜拉  B.弗洛伊德 C.皮亚杰D.柯尔伯格 2.下列不属于安斯沃思对…

ue4材质节点大全_转载于知乎:UE4 多象限(UDIM)贴图在UE4中的应用

各位小伙伴早上好啊!真的又隔了很久才再次见面。。这次是工作上一个同事在网上看到了一篇有意思的文章分享给我,觉得这种方式确实挺有意思,反正我是之前没有这么去考虑过。希望能够给大家带来一点启发!!此文章转载于知乎:UE4 多象限(UDIM)贴图…

【渝粤题库】陕西师范大学202311金融机构管理Ⅰ作业(高起专)

《金融机构管理》作业 一 、选择题 1.在我国的金融机构中,下列哪一项是政策性银行?( ) A.交通银行 B.中国银行 C.中国农业发展银行 D.中国农业银行 2.商业银行最主要的资金来源是( &#xff09…

JDK 12 Early Access Build 12中的原始字符串文字支持

本周Java世界上最大的新闻可能是JDK 11的通用性。 但是,另一个令人兴奋的发展是JDK 12 Early Access Build 12的发布 ( 2018年9月20日 )。 JDK 12的这个早期访问生成12是显著,因为它包括与实施方式中JEP 326 [“原始字符串&#x…

Latex各种命令、符号、公式、数学符号、排版等

本文仅供学习参考使用,一切版权和解释权均归原作者所有,转载地址:http://blog.csdn.net/garfielder007/article/details/51646604 数学符号详细内容见:http://mohu.org/info/symbols/symbols.htm 直接查看链接 http://www.mohu.o…

【渝粤题库】陕西师范大学292221 保险学Ⅰ 作业(高起专)

《保险学Ⅰ》作业 一、名词解释 1.比例再保险 2.保险深度 3.保险利益 4.履约终止 5.再保险 6.弃权与禁止反言 7.保险代理人 8.近因 9.保险密度 10.定值保险 11.人寿保险 二、填空题 1&#xff0…

cef异常处理_c++ 异常处理(2)

前面一篇博文简单介绍了 c 异常处理的流程,但在一些细节上一带而过了,比如,_Unwind_RaiseException 是怎样重建函数现场的,Personality routine 是怎样清理栈上变量的等,这些细节涉及到很多与语言层面无关的东西&#…

2021年春季学期期末统一考试 组织行为学 试题

试卷代号:1070 组织行为学 试题 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考卷和答题纸后才可离开考场。…