继承1 2024_9_18

1.继承的基本用法

当需要继承的时候,我们就在派生类的后面加上一个权限+父类,这个权限可以是公有,保护和私有,后面就是继承的父类.此时,下面的stu这个派生类,也就可以使用Person里面的方法了.

2.继承基类成员访问方式的变化

当父类被继承到派生类的时候,此时会根据继承方式的不同,而导致父类的不同类型数据访问的方式也可能会发生改变.

现在我们来罗列一下这些情况:
首先是父类里面的private成员,当这种成员被继承后,不论是公有继承,保护继承还是私有继承,他的访问权限就只是private;如果是父类里面的protected成员,则如果是公有继承和保护继承,则访问权限就是protected,如果是私有继承,则访问方式是private;最后如果是父类的公有数据,如果公有继承则访问权限则是public,如果是保护和私有继承,则分别是protected和private.

到这里,我们就可以很明显的看出一点规律.比如私有类的任意继承方式都是不可见的.如果说继承的权限小于父类数据的原有权限,则访问方式就是继承权限,如果等于,那就是继承权限/父类原有权限,如果大于,则是父类原有权限.

3.基类和派生类的对象赋值转换

对于对象之间的赋值和相互转换,我们知道,意义相近的类型,是可以相互之间进行转换和赋值的.比如int和double之间可以相互转换,单参数构造函数支持隐式类型转换(在隐式类型的转换中会产生临时变量,临时变量具有常性) , 那么基类和派生类之间 , 也可以相互赋值和转换吗?

在public继承的情况下,每一个子类都可以看作一个特殊的父类(is-a概念).在这种情况下的赋值,他叫做切割/切片赋值.他们的赋值转换之间并不会产生临时变量,这叫做切片赋值兼容.怎么证明?

如果说这里会产生临时变量的话,那么临时变量具有常性,我们因此需要在Person前面加一个const,但是这里不加const他都没有报错,因此这里并不会产生临时变量.

不管是对象也好,还是引用,或是指针,都是可以相互转换的.

4.继承中的作用域

1.在继承体系中基类和派生类都有着自己独立的作用域,这也就意味着,在基类和派生类里面,函数名是可以相同的,也可以定义同名成员.

2.子类和父类中如果有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义.

当基类和派生类都有一个叫_age的时候,此时调用st.Print()的话,就会就近原则的输出Stu的类.

一个在局部域,一个在全局域,则会有限输出局部域的变量.

局部域和全局域都会影响生命周期,访问.

在同一个作用域下,相同名字的函数会构成重载.

而对于这个父类和子类的构造函数和析构,如果是构造的话,则会先构造父类,后构造子类,而析构则会先析构子类,后析构父类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值