第一百零一天学习记录:C++核心:类和对象Ⅵ(五星重要)继承上

news2024/12/25 9:11:27

继承

继承是面向对象三大特性之一

继承的基本语法

普通写法:

#include <iostream>
using namespace std;

//普通实现页面

//Java页面
class Java
{
public:
	void header()
	{
		cout << "首页、公开课、登录、注册……(公共头部)" << endl;
	}
	void footer()
	{
		cout << "帮助中心、交流合作、站内地图……(公共底部)" << endl;
	}
	void left()
	{
		cout << "Java、Python、C++、……(公共分类列表)" << endl;
	}
	void content()
	{
		cout << "Java学科视频" << endl;
	}
};

//Python页面
class Python
{
public:
	void header()
	{
		cout << "首页、公开课、登录、注册……(公共头部)" << endl;
	}
	void footer()
	{
		cout << "帮助中心、交流合作、站内地图……(公共底部)" << endl;
	}
	void left()
	{
		cout << "Java、Python、C++、……(公共分类列表)" << endl;
	}
	void content()
	{
		cout << "Python学科视频" << endl;
	}
};

//C++页面
class Cpp
{
public:
	void header()
	{
		cout << "首页、公开课、登录、注册……(公共头部)" << endl;
	}
	void footer()
	{
		cout << "帮助中心、交流合作、站内地图……(公共底部)" << endl;
	}
	void left()
	{
		cout << "Java、Python、C++、……(公共分类列表)" << endl;
	}
	void content()
	{
		cout << "C++学科视频" << endl;
	}
};

void test01()
{
	cout << "Java下载视频页面如下:" << endl;
	Java ja;
	ja.header();
	ja.footer();
	ja.left();
	ja.content();
	cout << "------------------------------------" << endl;
	cout << "Python下载视频页面如下:" << endl;
	Python py;
	py.header();
	py.footer();
	py.left();
	py.content();
	cout << "------------------------------------" << endl;
	cout << "C++下载视频页面如下:" << endl;
	Cpp cpp;
	cpp.header();
	cpp.footer();
	cpp.left();
	cpp.content();
}

int main()
{
	test01();
	return 0;
}

在这里插入图片描述
继承写法:

#include <iostream>
using namespace std;

//继承实现页面
//继承的好处:减少重复代码
//语法: class子类:继承方式 父类
//子类 也称 派生类
//父类 也称 基类

//公共页面类

class BasePage
{
public:
	void header()
	{
		cout << "首页、公开课、登录、注册……(公共头部)" << endl;
	}
	void footer()
	{
		cout << "帮助中心、交流合作、站内地图……(公共底部)" << endl;
	}
	void left()
	{
		cout << "Java、Python、C++、……(公共分类列表)" << endl;
	}
};

//Java页面
class Java :public BasePage
{
public:
	void content()
	{
		cout << "Java学科视频" << endl;
	}
};

//Python页面
class Python :public BasePage
{
public:
	void content()
	{
		cout << "Python学科视频" << endl;
	}
};

//C++页面
class Cpp :public BasePage
{
public:
	void content()
	{
		cout << "CPP学科视频" << endl;
	}
};

void test01()
{
	cout << "Java下载视频页面如下:" << endl;
	Java ja;
	ja.header();
	ja.footer();
	ja.left();
	ja.content();
	cout << "------------------------------------" << endl;
	cout << "Python下载视频页面如下:" << endl;
	Python py;
	py.header();
	py.footer();
	py.left();
	py.content();
	cout << "------------------------------------" << endl;
	cout << "C++下载视频页面如下:" << endl;
	Cpp cpp;
	cpp.header();
	cpp.footer();
	cpp.left();
	cpp.content();
}

int main()
{
	test01();
	return 0;
}

问:C++继承一个类可以写成:Class lei1:public lei2,那如果继承两个类该怎么写呢?
答:
在C++中,可以通过使用逗号分隔的方式来实现从多个类继承。下面是一个示例:

class BaseClass1 {
    // BaseClass1的成员和方法
};

class BaseClass2 {
    // BaseClass2的成员和方法
};

class DerivedClass : public BaseClass1, public BaseClass2 {
    // DerivedClass的成员和方法
};

在该示例中,DerivedClass 继承自 BaseClass1BaseClass2。请注意,多重继承需要注意解决可能出现的命名冲突问题。

继承方式

继承的语法:class 子类:继承方式 父亲

继承方式一共有三种:
1、公共继承
2、保护继承
3、私有继承
在这里插入图片描述
注:截图转自黑马程序员免费教学视频

//公共继承
class Base1
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

class Son1 :public Base1
{
public:
	void func()
	{
		m_A = 10;//父类中的公共权限成员 到子类中依然是公共权限
		m_B = 10;//父类中的保护权限成员 到子类中依然是保护权限
		//m_C = 10;//父类中的私有权限成员 到子类中无法访问
	}
};

//保护继承
class Base2
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

//私有继承
class Base3
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

class Son3 :private Base3
{
public:
	void func()
	{
		m_A = 100;//父类中的公共权限成员 到子类中是私有权限
		m_B = 100;//父类中的保护权限成员 到子类中依然是私有权限
				  //m_C = 100;//父类中的私有权限成员 到子类中无法访问
	}
};

class Son2 :protected Base2
{
public:
	void func()
	{
		m_A = 100;//父类中的公共权限成员 到子类中是保护权限
		m_B = 100;//父类中的保护权限成员 到子类中依然是保护权限
				 //m_C = 100;//父类中的私有权限成员 到子类中无法访问
	}
};

class GrandSon3 :public Son3
{
	void func()
	{
		//m_A = 1000;//到了Son3中 m_A变为私有,及时是儿子,也是访问不到
		//m_B = 1000;
	}
};

void test01()
{
	Son1 s1;
	s1.m_A = 100;
	//s1.m_B = 100;//类外无法访问类内,有保护权限
}

void test02()
{
	Son2 s2;
	//s2.m_A = 1000;//在Son2中 m_A变为保护权限,因此类外访问不到
	//s2.m_B = 1000;//在Son2中 m_A变为保护权限,不可用访问
}

void test03()
{
	Son2 s3;
	//s3.m_A = 1000;//在Son2中 m_A变为私有权限,因此类外访问不到
	//s3.m_B = 1000;//在Son2中 m_A变为私有权限,不可用访问
}

int main()
{
	return 0;
}

继承中的对象模型

#include<iostream>
using namespace std;
//继承中的对象模型
class Base
{
public:
	int m_A;
protected:
	int m_B;
private:
	int m_C;
};

class Son :public Base
{
public:
	int m_D;
};

//利用开发人员命令提示工具查看对象模型
//跳转盘符 (如果有需要)
//跳转文件路径 cd 具体路径下
//查看命名
//cl /d1 reportSingleClassLayout类名 文件名

void test01()
{
	//16
	//在父类中所有非静态成员属性都会被子类继承下去
	//父类中私有成员属性是被编译器给隐藏了,因此是访问不到,但是确实被继承下去了
	cout << "size of Son = " << sizeof(Son) << endl;
}

int main()
{
	test01();
	return 0;
}

在这里插入图片描述
在这里插入图片描述
结论:父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到

继承中的构造和析构顺序

子类继承父类后,当创建子类对象,也会调用父类的构造函数

#include<iostream>
using namespace std;
class Base
{
public:
	Base()
	{
		cout << "Base构造函数。" << endl;
	}
	~Base()
	{
		cout << "Base析构函数。" << endl;
	}
};


class Son :public Base
{
public:
	Son()
	{
		cout << "Son构造函数。" << endl;
	}
	~Son()
	{
		cout << "Son析构函数。" << endl;
	}
};

void test01()
{
	//Base b;

	//继承中的构造函数和析构顺序如下;
	//先构造父类,再构造子类,析构的顺序与构造的顺序相反
	Son s;
}

int main()
{
	test01();
	return 0;
}

总结:继承中,先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反。

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

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

相关文章

电子森林STEP-MXO2_1 入门部分全部实验

前言 本部分实验基于电子森林小脚丫开发板的数电入门教程实验。实验链接&#xff1a;step-mxo2入门教程 电子森林] (eetree.cn) 其中代码是博主学习后根据自己思路自己敲的&#xff0c;并非直接复制&#xff0c;且仅供学习交流使用&#xff0c;侵删。 lattice 环境配置在此不…

【解压缩技巧】2种方法合并ZIP分卷压缩文件

文件太大的时候&#xff0c;很多人都会选择“分卷压缩”来压缩ZIP文件&#xff0c;那分卷后的ZIP文件要怎么合并回去呢&#xff1f;今天小编就来分享2个合并方法&#xff0c;下面一起看看吧。 方法一&#xff1a; 使用7-Zip压缩软件的自带“合并文件”功能。 首先打开7-Zip&a…

Mac下pom.xml文件中找不到env.JAVA_HOME

Mac 11.7.6 这个是解决后的样子&#xff0c;解决前是env.JAVA_HOME找不到 上图中的${env.JAVA_HOME}中的env是用来获取系统环境变量&#xff0c;但是在mac10以上的版本,即使我们在bash_profile文件中配置了JAVA_HOME&#xff0c;这里也不能直接使用env将JAVA_HOME点出来&#…

解决报错:“export ‘default‘ (imported as ‘VueRouter‘) was not found in ‘vue-router‘

目录 ❓ 问题描述 ❌ 报错信息 ⁉️ 问题原因&#xff1a; &#x1f388; 解决办法&#xff08;仅windows&#xff09;: 如何查看所装依赖的版本号 如何下载或卸载已有依赖版本 说说一些兼容性问题 &#x1f4da; 参考资料&#xff1a; ❓ 问题描述 用npm run serve运…

metersphere主从节点部署

metersphere主从节点关系 环境搭建 docker 环境准备 检查内存是否大于8G free -m 安装docker服务 安装docker&#xff0c;使用yum -y install docker&#xff1b; 启动docker&#xff0c;使用systemctl start docker&#xff1b; 设置开机启动&#xff0c;使用systemctl en…

Web3与物联网行业:实现安全、可信与智能的连接

随着物联网技术的快速发展&#xff0c;我们正迎来一个高度互联、智能化的未来。而Web3作为互联网的下一次演进&#xff0c;将为物联网行业带来重要的变革。 本文将探讨Web3在物联网行业中的应用前景和优势&#xff0c;以及如何实现安全、可信和智能的连接。 第一部分&#xff…

亚马逊哪些因素影响下单成功率

在亚马逊上下单时&#xff0c;下列因素可能影响下单的成功率&#xff1a; 1、账户信息准确性&#xff1a;确保您的亚马逊账户信息是准确的&#xff0c;包括配送地址、付款方式和联系方式等。错误或过期的信息可能导致下单失败。 2、库存和供应情况&#xff1a;某些商品可能由…

业财一体化与数据集成平台:实现数字化转型的关键利器

业财一体化一直是企业信息化领域的热门话题&#xff0c;而随着ERP技术的升级和发展&#xff0c;数据集成平台如轻易云正逐渐崭露头角。本文探讨了不同的业财一体化架构模式&#xff0c;并重点介绍了轻易云数据集成平台的强大集成优势。该平台通过一站式的服务&#xff0c;包括数…

linux 下如何安装 tar.gz包

linux 下如何安装 tar.gz包 解压缩进入解压后的文件目录下 解压缩 tar -zxvf pycharm-community-2023.1.3.tar.gz进入解压后的文件目录下 ./pycharm.sh可执行Pycharm 建议将目录转移到其他位置 我习惯使用2020版本的 下载地址

交通 | 针对Close-Enough旅行商问题的一种分支定界算法

论文解读​&#xff1a;王飞龙&#xff0c;曲晨辉 1、问题背景 \qquad 旅行商问题(TSP)是一种众所周知的路径问题。TSP的目标是在图 G ( V , E ) G(V,E) G(V,E)中找一条以场站为起终点的最短路&#xff0c;访问所有客户点 V V V&#xff0c;同时没有子环路。令 E E E表示网络中…

【复习30-35题】【每天40分钟,我们一起用50天刷完 (剑指Offer)】第二十一天 21/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

几款ai绘画二次元关键词软件分享给你

伴随着二次元文化的兴起&#xff0c;越来越多的人开始关注和喜爱这种独特的漫画风格。二次元绘画风格确实赏心悦目&#xff1a; 当然&#xff0c;绘画创作是二次元文化中不可或缺的部分&#xff0c;很多人也因此对绘画更加热爱。然而&#xff0c;想要制作二次元比较好看的绘画并…

RocketMQ5.0的Broker主从同步机制

RocketMQ5.0的Broker主从同步机制 一、主从同步工作原理 为了提高消息消费的高可用性&#xff0c;避免Broker发生单点故障引起存储在Broker上的消息无法及时消费&#xff0c; RocketMQ引入Broker主备机制&#xff0c;即&#xff1a;消息消费到达主服务器后需要将消息同步到消…

15分钟真正搞懂什么是“交叉熵损失函数”

大家好啊&#xff0c;我是董董灿。 在你刚学习神经网络的时候&#xff0c;有没有被一个名字叫做“交叉熵”的概念绕的云里雾里&#xff0c;以至于现在看到这个概念&#xff0c;依然很懵。 今天就来看一下&#xff0c;这个所谓的“交叉熵”到底是什么&#xff0c;以及它在神经…

【项目级面试题】关于前端鉴权这块,能详细的说说吗?

如果有人问你&#xff1a;”你做了这么多年的开发&#xff0c;关于前端鉴权这块&#xff0c;能详细的说说吗&#xff1f;“。你该如何作答&#xff0c;脑海中有没有一个完整的思路。 像 Token、Cookie、Session、JWT、单点登录 这些概念&#xff0c;它们的作用、应用场景、如何…

【C#】并行编程实战:使用 PLINQ(3)

PLINQ 是语言集成查询&#xff08;Language Integrate Query , LINQ&#xff09;的并行实现&#xff08;P 表示并行&#xff09;。本章将继续介绍其编程的各个方面以及与之相关的一些优缺点。 本文的主要内容为 PLINQ 中的组合并行和顺序 LINQ 查询、取消 PLINQ 查询、使用 PLI…

Azure AD混合部署,实现在本地AD同步到AAD上面

一、前期准备 1、进入 Azure云 注册一个账号 云计算服务 | Microsoft Azure 2、进入 AAD 管理后台 Microsoft Azure 3、创建一个新的租户 4、添加自定义域名&#xff0c;这里要做下验证&#xff0c;所以你要有个线上的域名 5、创建一个全局管理员 6、登陆本地AD&#xff0c;创…

第133页的gtk+编程例子——计算器应用改写网上的例子

第133页的gtk编程例子——计算器应用改写网上的例子 来源&#xff1a;《GTK的计算器》 https://blog.csdn.net/zhouzhouzf/article/details/17097999 重点在于它的设计思路是比较巧妙的&#xff0c;能够处理多种情况&#xff0c;比较容易理解&#xff0c;也感到人类的思想是非…

Java进程ProcessBuilder类的介绍及使用,ProcessBuilder调用外部程序执行shell命令Linux命令

目录 ProcessBuilder类的介绍及使用 【前言】 【正文】 --构造方法-- --常用方法-- --使用技巧-- --调用本地Shell命令&#xff0c;实例-- 【总结】 【注意】 ProcessBuilder类的介绍及使用 【前言】 在做一个项目的时候需要用到运行时动态执行JAVA命令&#xff0c;一…

常用数据聚类算法总结记录与代码实现[K-means/层次聚类/DBSACN/高斯混合模型(GMM)/密度峰值聚类/均值漂移聚类/谱聚类等]

本文的主要目的是总结记录日常学习工作中常用到的一些数据聚类算法&#xff0c;对其原理简单总结记录&#xff0c;同时分析对应的优缺点&#xff0c;以后需要的时候可以直接翻看&#xff0c;避免每次都要查询浪费时间&#xff0c;欢迎补充。 聚类算法是一种无监督学习的方法&am…