C++ 基础 --继承

本文详细介绍了C++中的继承特性,包括继承的概念、继承方式与访问限定符、赋值兼容规则、作用域、默认成员函数、析构函数、友元以及静态变量。重点讨论了菱形继承引发的数据冗余和二义性问题,以及通过虚继承如何解决这一问题。最后,文章强调了继承与组合在程序设计中的不同应用和优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承的概念及定义

继承是面向对象程序设计的重要特性,其本质就是类的复用。
在这里插入图片描述

在这里插入图片描述
这里属于 is - a 的关系,我们的student 和 teacher 都继承了父类(基类) person 。
继承后父类的person的成员 都会变为子类的一部分,实现类的复用。


继承关系和访问限定符

在这里插入图片描述
总结来说,继承后的访问限定是 基类成员继承方式权限小的那一个。其中基类中的private是不可见的。
这里的不可见解释:
private也被继承到了派生类中,但是语法限制派生类对象不论在类里还是类外都无法访问它。

如果基类成员不想在类外被访问,但要被派生类访问,我们使用protected限定,我们可以看出,protected限定符是为了继承而出现的。

还有一个小细节是,class 默认继承方式是private ,而struct 是public ,我们一般不会省略继承方式。

实际运用中,一般都是使用public继承,通过控制基类的成员限定符来达到目的。


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

派生类对象 可以给基类的对象、 基类的指针、基类的引用,进行赋值。也叫做赋值兼容规则。
在这里插入图片描述
从图中我们可以很轻易的看出我们的子类给父类赋值的时候,仅会将子类中父类的部分进行赋值,我们可以形象的理解为切片。这就是派生类给基类赋值。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
代码中的第三点我们先挖一个坑,之后再来填。

继承中的作用域

我们要知道,基类和派生类属于独立的作用域,此时就会产生问题,如果基类和派生类中有同名成员,子类对象将会自动屏蔽掉父类继承下来的同名成员,我们称此情况为隐藏,也叫做重定义。当然我们可以使用访问限定符的方式来指定基类中的同名成员。
函数名如果相同 直接构成了 隐藏/重定义。在此我们可以对比一下函数重载,他们的区别是:是否在同一作用域。重载一定是在同一作用域下的函数名相同

基类::同名成员 (显式访问)


在这里插入图片描述
我们有一个派生类对象s,很容易通过监视窗口看出我们继承的结构
派生类成员在下,基类在上,且同名成员有不同的值。
在这里插入图片描述

想分别访问这两个不同的num,我们可以通过访问限定符的方式,默认为当前作用域。
在这里插入图片描述

派生类的默认成员函数

默认成员函数是指:我们不写编译器自动生成的函数。
其中有两种情况
1.我们真的没写
2.我们写了,但是是无参的或是全缺省的,我们都叫编译器自动生成
默认构造函数在类中只能有一个

接下来 ,我们来谈派生类中的默认构造函数
派生类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值