继承与多态

类的继承

为了实现代码的重用
*一个派生类可以同时有多个基类,这种情况称为多继承
类和对象大小 = 虚函数指针 + 所有非静态数据成员大小 + 因对齐而多占的字节
派生对象的大小=基类存储空间+派生类特有的非static数据成员的空间

公有继承(public)

基类的公有和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问。
*基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问。
*派生类中的成员函数可以直接访问基类中的public和protected成员但不能直接访问基类的private成员。
*通过派生类的对象访问从基类继承的成员,只能访问public成员

私有继承(private)

基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可直接访问。
*基类的public和protected成员都以private身份出现在派生类中,但基类的private成员不可直接访问
*派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。
*通过派生类的对象不能直接访问从基类继承的任何成员。

保护继承(protected)

*基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可直接访问。
*派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。
*通过派生类的对象不能直接访问从基类继承的任何成员
注意:保护成员可以被派生类正常访问,但不能被基类的对象直接访问。(继承上同public,使用上同private)
在这里插入图片描述
易忘知识点:继承中的构造函数的执行顺序
派生类构造函数执行的一般顺序如下:
继承的基类构造函数–>派生类中成员对象的构造函数–>派生类的构造函数体中的内容
(1)调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右).
(2)对派生类新增的成员初始化,初始化顺序按照它们在类中声明的顺序。(对象成员初始化是自动调用所属类的构造函数完成的)
(3)执行派生类的构造函数体中的内容(形参列表中的顺序与执行顺序无关)。
(4)析构函数的执行顺序与构造函数执行的顺序相反。

虚基类及其派生类构造函数

*建立对象时所指定的类称为最远派生类
*虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。
*在整个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化表中为虚基类的构造函数列出参数。如果未列出,
则表示调用该虚基类的默认构造函数
*在建立对象时,只有最远派生类的构造函数调用虚基类的构造函数,其他类对虚基类构造函数的调用被忽略。

带有纯虚函数的类是抽象类抽象类不能被实例化。抽象类派生出新的类后,如果派生类给出了所有纯虚函数的函数实现,这个派生类就可以定义自己的对象,因而不再是抽象类;反之,如果派生类没有给出所有全部的纯虚函数的实现,这时的派生类仍然是一个抽象类。

多态

同样的消息被不同类型的对象接收时导致不同的行为
面向对象的多态(4种):重载多态、强制多态、包含多态、参数多态

绑定

静态绑定/早期绑定/前绑定:在编译连接阶段完成的情况称为静态绑定——重载、强制和参数多态
动态绑定/晚期绑定/后绑定:在程序运行阶段完成的情况称为动态绑定——包含多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SODA_BLUEBLUE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值