C++学习笔记2 :继承与派生(二)

继承与派生(二)

单继承内存

没有继承时,成员变量和成员函数会分开存储
1.对象的内存中只包含成员变量,存储在栈区或堆区(使用new创建对象时)
2. 成员函数与对象内存分离,存储在代码区
3. 编译器会将成员变量和成员函数分开存储:分别为每个对象的成员分配内存,但是所有的对象都共享同一段函数代码
4. 类可以看作是一种复杂的数据类型,如果使用sizeof求类所占的空间的大小,会发现,只是计算了成员变量的大小,并没有把成员函数也包含在内。

有继承关系时的内存模型
1.有继承关系时,派生类的内存模型可以看成是基类成员变量和新增成员变量的总和
2.所有成员函数仍然存储在另外一个区域——代码区,由所有对象共享。

有关基类、派生类构造

  1. 实例化派生类对象时,首先会创建基类对象,调用基类构造,然后再调用派生类构造。(析构时刚好相反,先调用派生类的析构再调用基类的析构)
  2. 派生类构造应通过成员初始化列表将基类信息传递给基类构造。
  3. 应该在派生类构造中初始化派生类新增的数据成员

派生类与基类之间的关系

1.派生类对象可以使用基类的非私有成员函数
2. 基类指针可以在不进行显式类型转换的情况下指向派生类对象
3. 可以将派生对象赋值给基类对象,程序将使用隐式重载运算符

注意
1.基类指针或引用只能调用基类函数,并不能调用派生类函数
2.不可以将基类对象和地址赋给派生类引用和对象,即不能进行逆操作

派生类成员的访问控制

公有继承

基类的公有成员和受保护成员,在派生类中保持原来的访问属性,其私有成员仍为基类所独有。

私有继承

基类的公有成员和受保护成员,在派生类中成了私有成员,私有成员仍为基类独有

受保护继承

基类公有成员和受保护成员,在派生类中成了受保护成员,私有成员仍为基类独有。
在这里插入图片描述
注意
1.公有权限下,自己、派生类及外部都可以访问
2.私有权限下,只能自己访问,派生类及外部都无法访问
3.受保护权限下,自己和派生类可以访问,外部无法访问

继承方式提供给程序员对类进行封装的机制(隐藏细节):

1.全部继承,不封装基类,那么用公有继承
2.全部继承,完全封装基类,那么使用私有继承
3.全部继承,有选择的封装基类,那么使用受保护继承

这三种选择是程序员在开放中运用面向对象思想的重要体现
1.需要封装哪些成员变量和函数?
2.需要把哪些成员函数作为接口来被调用?

继承与组合

在一个类中有另外一个类的对象作为数据成员这种方式叫做类的组合形式。
1.通过继承建立了派生类与基类的关系,是一种is-a“是”的关系
比如:狗是哺乳动物,战士是英雄
2.类的组合关系,它们之间不是“是”的关系,而是“有”的关系
比如:学生有书包,战士有武器
3.继承是纵向的,组合是横向的

总结

1.面向对象编程由4个部分组成:抽象、封装、继承和多态。
2.派生类有三种继承方式:公有、私有、受保护
3.派生类由成员变量和成员函数组成
4.派生类的成员访问有三种方式:公有访问、私有访问、保护访问
5.类的继承和类的组合是面向对象编程的核心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值