【C/C++】继承的方式和优点

news2024/9/24 7:18:14

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • 一、继承方式
  • 二、继承的优点

一、继承方式

继承方式描述了父类成员在子类中的访问控制

继承方式是指子类从父类继承了一些成员,包括数据成员和成员函数。

继承方式共有三种:

  • public
  • protected
  • private

继承方式和访问修饰符共同决定了父类成员在子类中表现出来的属性

在继承关系中,子类可以访问父类中被继承的公有成员和受保护成员,但无法访问父类中被继承的私有成员。
公有成员在子类中的访问控制仍然保持为公有,受保护成员在子类中的访问控制变为受保护。

访问控制规律如下:
在这里插入图片描述

二、继承的优点

定义三个类:CSheepCPigCDog

他们都有自己的行为like()和一个共同的行为walk()

#include <iostream>
#include <string>
using namespace std;
class CSheep
{
public:
	int m_weight;
	void like()
	{
		cout << "喜欢吃草" << endl;
	}
	void walk()
	{
		cout << "散步" << endl;
	}
};
class CPig
{
public:
	int m_weight;
	void like()
	{
		cout << "喜欢胡萝卜" << endl;
	}
	void walk()
	{
		cout << "散步" << endl;
	}
};
class CDog
{
public:
	int m_weight;
	void like()
	{
		cout << "喜欢骨头" << endl;
	}
	void walk()
	{
		cout << "散步" << endl;
	}
};

在主函数中分别创建三个类对象,他们walk()方法相同

int main()
{
	CSheep sheep;
	sheep.m_weight = 10;
	sheep.like();
	sheep.walk();
	//-----------
	CPig pig;
	pig.m_weight = 50;
	pig.like();
	pig.walk();
	//-----------
	CDog dog;
	dog.m_weight = 5;
	dog.like();
	dog.walk();

	return 0;
}

造成了代码冗余:

即每个类中都定义一遍相同的walk()方法

在这里插入图片描述

利用继承就可以减少冗余性:

创建一个CPet类作为这三个类的基类,在基类中定义walk()方法:

#include <iostream>
#include <string>
using namespace std;
class CPet
{
public:
	int m_weight;
	void walk()
	{
		cout << "散步" << endl;
	}
	CPet()
	{
		m_weight = 20;
	}
};

在派生类中对CPet继承,主函数中就可以直接使用对象调用基类中的walk()方法:

class CSheep:public CPet
{
public:
	void like()
	{
		cout << "喜欢吃草" << endl;
	}
};
class CPig :public CPet
{
public:
	void like()
	{
		cout << "喜欢胡萝卜" << endl;
	}
};
class CDog :public CPet
{
public:
	void like()
	{
		cout << "喜欢骨头" << endl;
	}
};
int main()
{
	CSheep sheep;
	sheep.like();
	sheep.walk();
	cout << "---------" << endl;
	CDog dog;
	dog.like();
	dog.walk();

	return 0;
}

在这里插入图片描述

  • 继承的优点:我们可以将类中的一些功能相近、相似的共同的方法,抽离出来放到单独的一个类中并让其继承这个类,那么抽离出来的类就是父类,将来其他类在增加公共的方法时,我只需要在父类添加一份即可。

  • 提高了代码的复用性、扩展性。


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LDAP: error code 53 - unauthenticated bind (DN with no password) disallowed

这个错误提示显示Jenkins无法连接到LDAP服务器&#xff0c;原因是LDAP服务器不允许未认证的绑定&#xff08;DN与无密码&#xff09;。 但实际填写了DN

OLED透明屏报价:如何选择高性价比的产品

OLED透明屏作为一项创新的显示技术&#xff0c;其透明度和高清晰度的特点使其在各个领域得到了广泛应用。 然而&#xff0c;在购买OLED透明屏时&#xff0c;消费者往往会面临多样的报价和产品选择。本文将基于相关数据和报告&#xff0c;为您详细介绍OLED透明屏的报价因素&…

有序充电运营管理平台是基于物联网和大数据技术的充电设施管理系统-安科瑞黄安南

随着我国能源战略发展以及低碳行动的实施&#xff0c;电动汽车已逐步广泛应用&#xff0c;而电动汽车的应用非常符合当今社会对环保意识的要求&#xff0c;以及有效节省化石燃料的消耗。 由于其没有污染排放的优点以及政府部门的关注&#xff0c;电动汽车将成为以后出行的重要…

JavaWeb学习-Day10

SpringBootWeb案例 准备工作 开发流程&#xff1a; 开发接口步骤&#xff1a; 删除部门&#xff1a; 新增部门&#xff1a; 简化代码&#xff1a; limit:分页展示&#xff0c;公式&#xff1a;&#xff08;页数-1&#xff09;*页面总数&#xff0c;页面总数 目前出现的问题&am…

基于mysql5.7制作自定义的docker镜像,适用于xxl-job依赖的数据库,自动执行初始化脚本(ddl语句和dml语句)

一、背景 xxl-job-admin依赖mysql数据库&#xff0c;且需执行初始化脚本&#xff0c;包括ddl和dml语句。 具体的步骤总结如下&#xff1a; 1、新建数据库xxl_job2、创建mysql表table3、执行dml语句&#xff0c;包括新建admin用户及密码&#xff0c;创建执行器和任务。 毫无疑…

vue uniapp 同意验证码滑块验证

前言 &#xff08;vue-puzzle-vcode&#xff09; 发送验证码以及登录的时候会做验证&#xff0c;防止机刷等 效果图 一、安装依赖 npm install vue-puzzle-vcode --save二、使用步骤 1.html使用 <Vcode :show"isShow" success"onSuccess"/>2.j…

Abaqus建筑工程应用的10大特征

前后处理界面友好易用 • 界面支持中英文 • 建模和查看结果采用一致的操 作环境 • 模型树和结果树使操作更便捷 • 支持基于Python脚本的建模方式 有限元求解器性能卓越 • 单元类型全――超500种类型 单元适应各种工程对象 • 材料模型多――能够模拟金属、 混凝土、岩…

使用fastjson2的@JSONField注解解决日期格式记录

最近在做一个三方对接&#xff0c;对方的日期格式数据要求时间日期格式: yyyyMMddHHmmss或者 yyyyMMdd&#xff0c;我一下想起了fastjson2工具包&#xff0c;所以很愉快的解决了此问题。 依赖jar如下&#xff1a; <dependency><groupId>com.alibaba.fastjson2</…

全球Salesforce顾问薪资大揭秘!顾问如何升职加薪?

Salesforce顾问通过针对业务挑战提出、记录和分析需求&#xff0c;提供解决方案&#xff0c;从而帮助企业改善Salesforce的流程和效率。顾问是企业和Salesforce之间的桥梁。 Salesforce顾问的薪资一直是生态系统中的热门话题&#xff0c;备受求职者关注。本篇文章将分享提高顾…

OpenEuler华为欧拉系统安装

OpenEuler华为欧拉系统安装 一、OpenEuler简介1、OpenEuler概述2、OpenEuler特性 二、OpenEuler部署安装1、安装前配置2、安装引导3、选择语言4、安装信息摘要 三、欧拉系统安装图形化界面1、需要在超级管理员&#xff0c;在root权限下操作2、启动图形化界面 四、手动安装VMwar…

Vue3语法系统进阶 - 全面掌握Vue3特性

目录 01-ref属性在元素和组件上的分别使用02-利用nextTick监听DOM更新后的情况03-自定义指令与自定义全局属性及应用场景04-复用组件功能之Mixin混入05-插件的概念及插件的实现06-transition动画与过渡的实现07-动态组件与keep-alive组件缓存08-异步组件与Suspense一起使用09-跨…

合宙Air724UG LuatOS-Air LVGL API控件--曲线 (Arc)

曲线 (Arc) 曲线控件&#xff0c;也可以称为弧。因为 Arc 本身就是弧&#xff0c;弧形的意思。根据控件的样子也能推测出它的使用场景&#xff0c;一般用在加载器(就是等待界面转的圈圈)或者数值显示&#xff0c;数值调节这些场景。曲线控件分了两个部分&#xff0c;前景和背…

机器学习笔记之优化算法(十六)梯度下降法在强凸函数上的收敛性证明

机器学习笔记之优化算法——梯度下降法在强凸函数上的收敛性证明 引言回顾&#xff1a;凸函数与强凸函数梯度下降法&#xff1a;凸函数上的收敛性分析 关于白老爹定理的一些新的认识梯度下降法在强凸函数上的收敛性收敛性定理介绍结论分析证明过程 引言 本节将介绍&#xff1a…

Element table根据字段合并表格(可多字段合并),附带拖拽列动态合并

效果如图&#xff0c;姓名 数值1 字段进行自动合并 封装合并列js - tableMerge.js // 获取列合并的行数 // params // tableData: 表格数据 // mergeId: 合并的列的字段名 export const tagRowSpan (tableData, mergeId) >{const tagArr [];let pos 0;tableData.map((i…

CentOS KVM虚拟安装和开机启动

1. 配置系统 关闭SELinux setenforce 0持久化关闭配置 vi /etc/selinux/config2. 安装虚拟化软件 安装 KVM、QEMU等虚拟化软件。 yum install qemu-kvm qemu-img virt-manager libvirt virt-install virt-viewer 检查LVM模块是否已经加载 lsmod |grep kvm设置开机启动 s…

【C语言】扫雷游戏(可展开)——超细教学

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将运用数组来实现 扫雷游戏。 目录&#xff1a; &#x1f31f;思路框架测试游戏 &#x1f31f;测试部分函数实现&am…

SimSolid技术原理解析 衡祖仿真

面向超大规模结构的无网格分析软件Altair SimSolid&#xff0c;自从面世以来&#xff0c;受到广大工程师的关注。SimSolid 是面向设计师、工程师和分析师的颠覆性仿真技术&#xff0c;可在几分钟内对结构复杂的 CAD 装配体进行结构分析。它消除了传统结构仿真中非常耗时、非常专…

农业水价综合改革系统主要组成

一、系统概述 农业水价改革灌区信息化系统主要由感知采集层、网络传输层、系统应用层等部分组成。通过无线技术、感知层技术与新型应用的有效结合&#xff0c;可以用于各种业务的传送&#xff0c;充分满足灌区监测站间的物与物互联&#xff0c;农业生产的自动化和信息化相结合。…

计算机系统简介

计算机系统简介 计算机系统 硬件 计算机实体&#xff0c;如主机、外设软件 具有各类特殊功能的信息&#xff08;程序&#xff09;组成 软件 系统软件 用来管理整个计算机系统 &#xff08;语言处理程序、操作系统、服务性程序、数据库管理系统、网络软件&#xff09;应用…

Apple用户如何利用Twinmotion路径追踪器渲染

Twinmotion 是一款功能强大的实时可视化工具&#xff0c;允许设计人员为建筑设计、产品设计等创建高质量的渲染和交互体验。其当前最强大的渲染功能之一是路径追踪器&#xff0c;它通过精确的照明计算生成逼真的图像。 然而&#xff0c;许多 Apple 用户想知道如何利用 Twinmot…