C++:继承

一 继承的概念及定义
1.1继承的概念

继承 (inheritance)机制是⾯向对象程序设计 使代码可以复⽤ 的最重要的⼿段

继承是在已有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类。原来的类称为基类(父类);新类称为派⽣类(子类)。 继承可以提高代码的复用性**,** 呈现出 ⾯向对象程序设计的层次结构。 以前我们接触的函数层次的复⽤,继承是类设计层次的复⽤。

【实例】

代码语言:javascript

AI代码解释

复制代码
//普通方式-设计一个学生类和一个老师类型
class Student
{
public:
	// 进⼊校园/图书馆/实验室刷⼆维码等⾝份认证
	void identity()
	{
		// ...
	}
	// 学习
	void study()
	{
		// ...
	}
protected:
	string _name = "peter"; // 姓名
	string _address; // 地址
	string _tel; // 电话
	int _age = 18; // 年龄
	int _stuid; // 学号
};
class Teacher
{
public:
	// 进⼊校园/图书馆/实验室刷⼆维码等⾝份认证
	void identity()
	{
		// ...
	}
	// 授课
	void teaching()
	{
		//...
	}
protected:
	string _name = "张三"; // 姓名
	int _age = 18; // 年龄
	string _address; // 地址
	string _tel; // 电话
	string _title; // 职称
};


//我们看到没有继承之前我们设计了两个类Student和Teacher,Student和Teacher都有姓名 / 地址 /
//电话 / 年龄等成员变量,都有identity⾝份认证的成员函数,设计到两个类⾥⾯就是冗余的。
//继承方式把两个类中的公有成员提取出来,设计成一个类,在继承这个类
class Person
{
public:
	// 进⼊校园/图书馆/实验室刷⼆维码等⾝份认证
	void identity()
	{
		// ...
	}

protected:
	string _name = "peter"; // 姓名
	string _address; // 地址
	string _tel; // 电话
	int _age = 18; // 年龄
};

class Student :public Person
{
public:
	// 学习
	void study()
	{
		// ...
	}
protected:
	int _stuid; // 学号

};

class Teacher :public Person
{
public:
	// 授课
	void teaching()
	{
		//...
	}
protected:
	string _title; // 职称
};
1.2继承的定义
1.2.1定义格式

下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。继承方式和访问限定符一样有三种:public继承、protected继承、private继承。

1.2.2类继承基类方式改变对应成员访问⽅式的变化

继承和访问限定符分类如下:

继承基类的方式不同不然会导致,访问基类成员的方式不同,具体如下:

规则

  1. 基类private成员在派⽣类中⽆论以什么⽅式继承都是不可⻅的 。 这⾥的不可⻅是指基类的私有成员还是被继承到了派⽣类对象中,但是语法上限制派⽣类对象不管在类⾥⾯还是类外⾯都不能去访问它。 (即无法在派生类中显示调用,可以通过在基类中设计一个公有函数进行访问) 2. 基类private成员在派⽣类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派⽣类中能访问,就定义为protected。 保护成员限定符是因继承才出现的。 3. 基类的私有成员无论任何生成派生类在派⽣类都是不可⻅ 。 基类的其他成员在派⽣类的访问⽅式 == Min(成员在基类的访问限定符,继承⽅式),public > protected > private。 4. 使⽤ 关键字class时默认的继承⽅式是private ,使⽤ struct时默认的继承⽅式是public , 不过最好显⽰的写出继承⽅式。 注意: 在实际运⽤中⼀般使⽤都是public继承,⼏乎很少使⽤protetced/private继承,也不提倡使⽤protetced/private继承,因为protetced/private继承下来的成员都只能在派⽣类的类⾥⾯使⽤,实 际中扩展维护性不强。
相关推荐
咩咩啃树皮3 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
炸膛坦客3 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
旖-旎3 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
鱟鲥鳚3 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
Henry Zhu1234 小时前
C++中的特殊成员函数与智能指针
c++
广州灵眸科技有限公司4 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
大模型码小白5 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司5 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
_wyt0016 小时前
多重背包问题详解
c++·背包dp
爱笑的源码基地6 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码