思考总结:继承

1.对象

1.赋值

1.基类对象可以赋值给派生类吗?

可以   因为派生类有基类对象的成员

2.派生类对象可以赋值给基类吗?

不可以  因为派生类有基类没有的成员   

2.成员函数调用

1.基类

基类的成员函数调用和一般的类是一样的

2.派生类

1.构造函数

1.先构造它继承过来的类

2.再构造派生类本身自己

2.析构函数

在析构的时候

1.先析构派生类自己的类

2.再析构继承过来的类

3.拷贝构造
1.派生类拷贝派生类

在拷贝构造的时候

1.先拷贝构造它继承过来的类
2.再拷贝构造派生类本身自己

2.基类拷贝派生类

1.直接调用基类的拷贝对象

4.赋值重载
1.派生类赋值给派生类

在赋值重载的时候

1.先调用基类的赋值重载

2.再实现派生类自己的(这个地方是是实现不是调用  如果是调用就是无限递归)

2.基类赋值给派生类

直接调用基类的的拷贝对象

5.const 取地址运算符和非 const 取地址运算符

 const取地址符和非const取地址符  派生类都是调用它自己的   不会去调用基类的

因为一个类只有一个地址

2.指针(引用同理)

1.基类对象取地址可以赋值给派生类指针吗?

直接赋值是不可以的

特殊情况可以  后面介绍

2.派生类对象取地址可以赋值给基类指针吗?

可以 这涉及到切片   也就是把派生类中的基类对象那部分取地址赋值过去

基类指针只 “认识” 基类的成员    所以基类指针指向的是派生类中基类的那部分

 派生类对象取地址赋值给基类指针   对这个指针* 调用的成员函数是基类的(比如基类的赋值重载)

指向的派生类对象(其中的基类部分)

但是类型是基类指针 

(. ->)只能访问基类的成员  不能访问派生类的

总结:

本质上这个地方就是一个基类的指针

指向的是一个基类对象(派生类的基类部分单独看 看成一个基类)  

访问也只能访问基类的东西 只不过  这个基类是在派生类内部罢了!

总结:继承 只是继承这个类   相当于把基类装到派生类里面   基类内部的结构不变 

基类成员初始化用的也是基类的析构函数  销毁也是基类的析构函数   继承 类比理解

就是基类是派生类的一个成员变量  只不过这个成员的类型不是内置类型   而是自定义类型

同时内置类型初始化和销毁不需要特殊处理   编译器会帮我们处理   比如说  int a;  但是自定义类型的  初始化和销毁需要我们自己来实现

所以我么们对象切片的时候   相当于把派生类的一个类型单独拿出来  只不过这个类型是自定义类型     这个派生类的对象  当然无法通过它访问派生类其他成员和函数了(它和派生类其他变量是同级的  只不过它是先声明/继承来的)

3.继承内部类和组合的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值