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继承下来的成员都只能在派⽣类的类⾥⾯使⽤,实 际中扩展维护性不强。
相关推荐
Ro Jace7 分钟前
计算机专业基础教材
java·开发语言
mango_mangojuice25 分钟前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
程序员侠客行29 分钟前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
时艰.33 分钟前
Java 并发编程 — 并发容器 + CPU 缓存 + Disruptor
java·开发语言·缓存
丶小鱼丶38 分钟前
并发编程之【优雅地结束线程的执行】
java
市场部需要一个软件开发岗位42 分钟前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
忆~遂愿1 小时前
GE 引擎进阶:依赖图的原子性管理与异构算子协作调度
java·开发语言·人工智能
MZ_ZXD0011 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
PP东1 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable
ManThink Technology1 小时前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络