类对象的继承002

1、继承简介

动物
猫 狗
加菲猫,苹果猫, 啸天犬 , 狗头

网页的头
网页的尾
网页的左侧
都一样

只有网页的内容不一样的时候可以先写一个基类网页,让各个子类去继承

有效减少代码量
子类添加自己的内容,
使用时候直接子类创建对象,使用子类和基类的方法
语法:class 子类名:继承方式 基类

2、继承方式

子类能访问基类成员的权限 和 对继承下来的成员的权限变更
p128的截屏
图片tupian
protected 方式继承基类,的子类中类中可以访问protected的属性,但是子类构造出来的对象,就属于类外了,此对象就不能访问子类中的protected属性了,

3、继承中的对象模型

基类中所有非静态的成员都被子类继承去了,不管private,都继承下去了。
基类中的私有成员属性,被编译器隐藏了,访问不到

F:
跳转盘幅
跳转到具体路径: cl
查看命令:
cl /d1reportSingleClassLayout 文件名(那个.cpp文件)

4、子类父类中构造析构顺序

父子子父
先有父类再有子类
析构:因为在栈上所以:反向
创建子类对象,会先创建父类对象

5、父子成员属性同名时

创建的子类对象直接(点)操作的是子类的属性,
如果要访问父类的成员需要添加作用域运算符

Son s;
s.m_Age;//直接访问子类中的属性
s.Base::m_Age;//访问父类中的属性

当出现同名函数时候,也是一样的调用方式,直接点出来就是子类的函数,如果想要访问父类的方法,就加父类的作用域

如果子类中出现了和父类的同名函数,会隐藏父类中的所有同名函数,
加作用域就可以解隐藏

静态成员变量编译阶段分配内存,共享同一份数据,类内声明,类外初始化。
int Base::m_Age=10;

通过对象的方式访问静态成员,
通过类名的方式访问静态成员,

cout<<Son::Base::m_Age<<endl;
//通过类名(Son)的方式访问,访问Base作用域下的成员属性
//两个::表示的含义不一样

6、多继承语法

class Son : public Base1,public Base2
{

};
如果两个父类中有同名成员属性,如何区分?
加作用域运算符 ::

菱形继承:
图示
问题:
继承了两份年龄数据,占用内存资源,
解决菱形继承的问题:使用虚继承
class sheep:virtual public animal
{};
class tuo:virtual public animal
{};
class sheeptuo:public sheep
{
};
解决菱形继承问题:虚基类表
图示下
把动物那个类变成虚基类,羊类和驼类继承一个虚基类指针,通过虚基类表,指向动物类的那个成员,保证唯一性

7、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值