CPP_封装_继承_多态

类的三方法:封装,继承,多态。
封装:使用一整套方法去创建一个新的类型,这叫类的封装。
继承:从一个现有的类型基础上,稍作改动,得到一个新的类型的方法,叫类的继承。
多态:当有几个不同的子类对象时,对象调用的函数会依据对象类型来调用相应类型的成员函数。

继承

1. 继承的主要目的是为了代码复用。
创建子类对象时,先创建父类,再创建子类。
析构时,先析构子类,再析构父类。

2. 访问权限:public, protected, private.
protected表示这种成员可以被子类继承和访问,但是外界却像private一样不可访问。
父类的private成员并不是不继承,而是对子类扩展的成员函数不可见。

public派生规则:
父类成员访问权限 子类继承自父类成员的访问限定
public public
protected protected
private 不可见

protected派生规则:
父类成员访问权限 子类继承自父类成员的访问限定
public protected
protected protected
private 不可见

private派生规则:
父类成员访问权限 子类继承自父类成员的访问限定
public private
protected private
private 不可见

3. 类型转换

父类A子类B
A *p = new B; 可以
B *p = new A; 不可以
p调用的成员方法为父类(A)的方法,非子类B的成员方法。属编译时绑定(因p的指针类型为A *),如要访问子类,需要使用多态(父类相应方法定义为virtual)。

A a;
B *p;
p = &a; 可以
p访问成员变量时可能越界(因p的成员变量多余a)

多态

声明为vitual的成员函数称为虚函数。
有虚函数的类都有一个隐含的指针成员vptr,指向一个虚函数表。(一个类一个)
每个父类或子类都各自有一张虚函数表。在构造对象时,对象的vptr成员指向该类的虚函数表。
包含虚函数的类的sizeof应多加4个字节,用于存放vptr(虚函数表指针)。

一旦某个函数在父类中声明为virtual,在所有继承它的子类中这个函数也是virtual的,子类可以不必写virtual关键字。

声明为virtual的函数,在运行时确定执行体,属动态绑定,dynamic binding。调用子类的具体实现。如果一个成员函数声明为virtual并在末尾加上=0而没有提供函数的实现,称为虚函数,拥有虚函数的类称为抽象类,抽象类不能实例化(或者说不能创建该类的对象),而只能被其他类继承。

抽象类也称为接口,继承了某个抽象类也称实现了某个接口。

 

转载于:https://www.cnblogs.com/embedded-linux/p/9613557.html

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

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

相关文章

win与linux渊源,微软与Linux从对立走向合作,WSL是如何诞生的

原标题:微软与Linux从对立走向合作,WSL是如何诞生的正文Windows Subsystem for Linux(WSL)的开发,让微软从Linux的对立面走向合作,并且不断加大对开源社区的支持力度。而作为微软历史上的重要转折点,外界对WSL技术在Pr…

文件编辑器 vi

1、关于文本编辑器; 文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice ... ... ,文本模式下的编辑器有vi、vim(vi的增强版本)和nano ... ... vi和vim是我们在Linux中最常用的编辑器。我们有必要介绍一下vi&a…

MFC80.DLL复制到程序目录中,也有的说复制到安装目录中

在用VS2005学习C调试程序的时候,按F5键,总提示这个问题, 不晓得什么原因,网上有的说找到MFC80.DLL复制到程序目录中,也有的说复制到安装目录中,可结果很失望,也有的VS2005安装有问题&#xff0…

vs显示堆栈数据分析_什么是“数据分析堆栈”?

vs显示堆栈数据分析A poor craftsman blames his tools. But if all you have is a hammer, everything looks like a nail.一个可怜的工匠责怪他的工具。 但是,如果您只有一把锤子,那么一切看起来都像钉子。 It’s common for web developers or databa…

服务器

服务器主流品牌:华为、浪潮、戴尔、惠普华为服务器:华为FusionServer RH2288 V3 华为FusionServer RH5885 V3 浪潮服务器: 浪潮英信NP3020M4 浪潮英信NF5280M4 戴尔服务器: 戴尔PowerEdge R730 机架式服务器 戴尔PowerEdge R740 机…

树莓派 zero linux,树莓派 zero基本调试

回家之前就从网上购买了一堆设备,回去也不能闲着,可以利用家里相对齐全的准备安装调试。结果人还没回来,东西先到了。购买的核心装备是树莓派zero w,虽然已经知道它比家族大哥树莓派小不少,但拿到手里还是惊奇它的小巧…

error C2440 “static_cast” 无法从“void (__thiscall CPppView )(void)”转换为“LRESULT (__thiscall

error C2440 “static_cast” 无法从“void (__thiscall CPppView )(void)”转换为“LRESULT (__thiscall CWnd )(WPARAM,LPARAM)” 不能转换void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)开发平台由VC6.0升级至VS2005,需要…

简单的编译流程

简易编译器流程图: 一个典型的编译器,可以包含为一个前端,一个后端。前端接收源程序产生一个中间表示,后端接收中间表示继续生成一个目标程序。所以,前端处理的是跟源语言有关的属性,后端处理跟目标机器有关的属性。 复…

广告投手_测量投手隐藏自己的音高的程度

广告投手As the baseball community has recently seen with the Astros 2017 cheating scandal, knowing what pitch is being thrown gives batters a game-breaking advantage. However, unless you have an intricate system of cameras and trash cans set up, knowing wh…

linux事务隔离级别,事务的隔离级别(Transaction isolation levels)2

READ COMMITTEDREAD COMMITTED这是数据库默认的隔离级别。它能保证你不能读取那张表格数据,只要有其它事务还在改变这张表格数据。可是,因为sql server在select操作的时,锁表格时间就那么一小会儿,如果一个事务在READ COMMITTED级…

Asp导出到Excel之二

response.contentType "application/vnd.ms-excel" response.addheader "Content-Disposition", "attachment; filename引出文件.xls" 一、适用于动态和表态表。 二、页面最好只存放数据表,不要有其它内容。 三、对于分页的情…

warning C4996: “strcpy”被声明为否决的解决办法

VC2005中,使用了很多标准的C函数,比如fopen,strcpy之类的。编译时会出现警告,比如这个: d:\xxxx.c(1893) : warning C4996: “strcpy”被声明为否决的 紧接着IDE有提示说:“This function or variable…

验证部分表单是否重复

1. 效果 图片中的名称、机构编码需要进行重复验证2. 思路及实现 表单验证在获取数据将需要验证的表单数据进行保存this.nameChangeTemp response.data.orgName;this.codeChangeTemp response.data.orgCode; 通过rule对表单进行验证 以名字的验证为例rules: {orgName: [// 设置…

python bokeh_提升视觉效果:使用Python和Bokeh制作交互式地图

python bokehLet’s face it, fellow data scientists: our clients LOVE dashboards. Why wouldn’t they? Visualizing our data helps us tell a story. Visualization turns thousands of rows of data into a compelling and beautiful narrative. In fact, dashboard vi…

用C#写 四舍五入函数(原理版)

doubled 0.06576523;inti (int)(d/0.01);//0.01决定了精度 doubledd (double)i/100;//还原 if(d-dd>0.005)dd0.01;//四舍五入 MessageBox.Show((dd*100).ToString()"%");//7%,dd*100就变成百分的前面那一部分了

C++设计UDP协议通讯示例

UDP是一种面向非连接,不可靠的通讯协议,相对于TCP来说,虽然可靠性不及,但传输效率较高   一、绪言   UDP是一种面向非连接,不可靠的通讯协议,相对于TCP来说,虽然可靠性不及,但…

浪里个浪 FZU - 2261

TonyY是一个喜欢到处浪的男人,他的梦想是带着兰兰姐姐浪遍天朝的各个角落,不过在此之前,他需要做好规划。 现在他的手上有一份天朝地图,上面有n个城市,m条交通路径,每条交通路径都是单行道。他已经预先规划…

C#设计模式(9)——装饰者模式(Decorator Pattern)

一、引言 在软件开发中,我们经常想要对一类对象添加不同的功能,例如要给手机添加贴膜,手机挂件,手机外壳等,如果此时利用继承来实现的话,就需要定义无数的类,如StickerPhone(贴膜是手…

北大青鸟c语言课后答案,北大青鸟C语言教程--第一章 C语言基础.ppt

《北大青鸟C语言教程--第一章 C语言基础.ppt》由会员分享,可在线阅读,更多相关《北大青鸟C语言教程--第一章 C语言基础.ppt(20页珍藏版)》请在人人文库网上搜索。1、第一章,C 语言基础,2,课程地位,.Net ,以 # 开始的语句称为预处理器指令,#include语句不…

nosql_探索NoSQL系列

nosql数据科学 (Data Science) Knowledge on NoSQL databases seems to be an increasing requirement in data science applications, yet, the taxonomy is so diverse and problem-centered that it can be a challenge to grasp them. This post attempts to shed light on…