C++中的继承

C++之继承 继承的概念及定义 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。 这就比如我们设计一个学生管理系统,学校中有老师,学生,工作人员等,我们要记录他们的信息比如学生有电话,姓名,地址,学号等这些信息。 class Student { str 阅读详情

1.为什么要使用继承

继承性是一个非常自然的概念,现实世界中的许多事物都是具有继承性的。人们一般用层次分类的方法来描述他们的关系。例如,下图就是一个简单的汽车分类图:
在这里插入图片描述
在这个分类树中建立了一个层次结构,最高一层是最普遍、最一般的,每一层都比它的前一层更具体,低层具有高层的特性,同时也有与高层的细微不同。例如,确定了一辆车是客车以后,没有必要再指出它可以进行运输,因为客车本身就是从运输汽车类中派生出来的。

1.1 继承的概念

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有的特性基础上进行扩展,增加功能,这样产生新的类,称作是派生类。继承呈现了面向对象程序设计的层析结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用。

例如:

class Person
{
   
   
public:
	void Print(){
   
   
		cout<<"name:"<<_name<<endl;
		cout<<"age:"<<_age<<endl;
	}
protected:
	string _name = "Romeo"; //姓名
	int _age = 18; //年龄
};
/*继承后父类的Person的成员(成员函数+变量)都会变成子类的一部分。这里
体现出了Student和Teacher复用了Person的成员。*/
class Student: public Person
{
   
   
protected:
	int _stuid; //学号
};

class Teacher:public Person
{
   
   
protected:
	int _jobid; //工号
};

1.2 继承的定义

class Student:public Person
{
   
   
public:
	int _stuid;  //学号
	char _major;  //专业
};

Student称为 派生类;
第一行的public是继承方式;
Person称为基类。

以下是三种继承方式:
在这里插入图片描述
以下是继承基类成员访问方式的变化:
在这里插入图片描述
总结:

1.基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。
2.基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接访问,但需要在派生类中能访问,就定义为protected。可见,保护成员限定符protected是因为继承才出现的。
3.表格里的访问方式都是取最小的“权限”。
4.使用关键字class时默认的继承方式是private,使用struct的默认继承方式是public,不过最好显示地写出继承方式。
5.**在实际运用中一般都使用的是public继承,几乎很少去使用protected/private继承,**也不提倡去使用。因为protected/private继承下来的成员都只能在派生类的类里面使用,实际中的扩展维护性不强。

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

a. 派生类对象可以赋值给基类对象/基类的指针/基类的引用。这里有个形象的说法叫“切片”或者“切割”。寓意把派生类中父类那部分切来赋值过去。
b. 基类对象不能赋值给派生类对象。
c. 基类的指针可以通过强制类型转换赋值给派生类指针。但是必须是基类的指针指向派生类对象时才是安全的。 这里的基类如果是多态类型,可以使用dynamic _cast来进行识别后进行安全转换。如下图所示:
在这里插入图片描述
示例代码:

class Person
{
   
   
protected:
	string _name; //姓名
	string _sex;  //性别
	int _age;    //年龄
};

class Student:public Person
{
   
   
public:
	int _No; //学号
};

void Test()
{
   
   
	Student sobj;
	//1.子类对象可以赋值给父类对象/指针/引用
	Person pobj = sobj;
	Person* pp = &sobj;
	Person& rp = sobj;
	//2.基类对象不能赋值给派生类对象
	sboj = pobj;  //error
	//3.基类的指针可以通过强制类型转换赋值给派生类指针
	pp = &sobj;
	Student* ps1 = (Student*)pp;
	ps1->_No = 10;

	pp = &pobj;
	Student
CPP中的继承语法 阅读详情

相关推荐

STM32移植LVGL(LittleVGL)

**STM32移植LVGL(LittleVGL)**

qq_53000374的博客 1万+

文华财经公式编程:麦语言简介及基础语法

文华财经公式语言(麦语言)是一种专门用于金融领域的编程语言,它是由文华财经公司开发的。提供了丰富的金融计算函数和数据处理功能,可以用于金融市场的数据分析、模型建立和交易策略的开发。例1:A:CLOSE;// 定义变量A为收盘价(盘中k线没有走完的时候A为最新价)。例2:MA5:=MA(C,5);// 定义收盘价的5周期均线(C为CLOSE简写)。例3:A:=REF(C,1);// 取得前一根k线的收盘价。

超哥量化的博客 1万+

保姆级教程:用Simulink从零搭建新能源汽车VCU蠕行控制模型(附模型下载)

本文提供了一份详细的Simulink建模教程,指导读者从零开始搭建新能源汽车VCU蠕行控制模型。内容涵盖环境配置、信号定义、蠕行模式使能条件、扭矩控制算法实现及模型验证等关键步骤,特别适合需要将控制算法转化为可执行模型的初学者。教程还包含实用代码示例和常见问题解决方案,帮助开发者快速掌握VCU蠕行控制的Simulink实现技巧。

547

等保三级-MySQL 安全加固实战指南

本文详细介绍了MySQL数据库在等保三级要求下的安全加固实战指南,涵盖身份鉴别、访问控制、安全审计、网络传输安全、入侵防范和数据完整性等关键领域。通过具体配置示例和实战经验,帮助用户有效提升MySQL数据库的安全防护能力,满足等保三级合规要求。

weixin_29197835的博客 183

【STM32】IEC60730 Class B软件安全实现 Part2:自检库实战指南

本文是STM32 IEC60730 Class B软件安全实现的实战指南,详细介绍了如何将X-CUBE-CLASSB自检库集成到用户项目中。内容涵盖软件包解构、内存划分、启动与运行时自检的集成步骤、关键代码示例及调试技巧,并阐述了为最终通过安全认证所需的文档与流程准备,帮助开发者高效实现MCU功能安全。

weixin_29185167的博客 92

西门子smart能搜到cpu但连接当前IP地址失败

将ip地址改到同一网段 本机为192.168.1.119就是192.168.1.1网段,但plc在192.168.0.1网段,所以显示ip连接失败,改为同一网段192.168.1.xxx即可(为避免ip冲突尽量改到200往后最大255)如果显示这一步,那么你的物理连接是没有问题的,应当是plc和电脑并不在同一网段导致的问题。输入ipconfig 查看本机网段与plc是否为同一网段。此电脑就不在同一网段所有造成通讯失败,接下来解决这个问题。win+r打开运行,打开cmd。再次尝试,如果还是报错,那么。

weixin_62678581的博客 9867

浪涌抗扰度部分解读

8.3 测试仪器: 8.3.1浪涌发生器(对于连接到对称通信线的接口采用10/700us的组合波发生器;对于其他情况采用1.2/50us(8/20us)组合波发生器,输出极性正负可调、移相范围0-360°可调,最大重复率至少每分钟1次,开路输出电压0.5-4kV,电源线的话有效效输出阻抗为2Ω,通信线的话有效输出阻抗为40Ω) 8.3.2 耦合/去耦网络 8.3.3 参考接地平板 8...

喵叫兽的博客 2505

【SigmaStudio】自定义算法组件之源码规范(二)

工作中自定义算法组件一般是dll文件,生成dll文件需要XML文件和DLB文件,记录一下DLB文件代码的编码规范,定义SigmaStudio SHARC算法开发的编码规则,涵盖函数原型、内存管理、接口结构体等关键要求,确保算法模块与SigmaStudio环境兼容

liang_song的博客 1377

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: C++ 实现二叉搜索树—BSTree
下一篇: C++之多态性
Romeo  i
博客等级 码龄9年 151粉丝 80原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值