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继承下来的成员都只能在派⽣类的类⾥⾯使⽤,实 际中扩展维护性不强。
相关推荐
c++之路12 分钟前
C++20概述
java·开发语言·c++20
Championship.23.2417 分钟前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮31 分钟前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
样例过了就是过了36 分钟前
LeetCode热题100 分割等和子集
数据结构·c++·算法·leetcode·动态规划
逻辑驱动的ken37 分钟前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
qq_3926906642 分钟前
Redis怎样应对Redis集群整体宕机带来的雪崩
jvm·数据库·python
冷雨夜中漫步1 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
麦兜和小可的舅舅1 小时前
ClickHouse 列管理机制解析:从 COW、IColumn 到 CRTP
c++·clickhouse
直奔標竿1 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
旖-旎1 小时前
深搜练习(组合)(5)
c++·算法·深度优先·力扣