C++类和对象——继承详解

news2025/1/23 3:15:15

目录

1.基本语法

2.继承方式 

3.继承中的对象模型

4.构造和构析顺序 

5.同名成员处理

6.同名静态成员处理

7.多继承语法

8.菱形继承 

图片示例:

虚继承

代码示例: 


1.基本语法

 

#include<bits/stdc++.h>
using namespace std;

//公共页面类
class basepage
{
public:
	void header()
	{
		cout << "启动" << endl;
	}
	
	void left()
	{
		cout << "结束" << endl;
	}
};

class three_body : public basepage
{
public:
	void content()
	{
		cout << "three_body" << endl;
	}
};

class wandering_earth : public basepage
{
public:
	void content()
	{
		cout << "wandering_earth" << endl;
	}
};

int main()
{
	three_body t;
	t.header();
	t.content();
	t.left();
	
	wandering_earth w;
	w.header();
	w.content();
	w.left();
	
	return 0;
}

 

 

 

2.继承方式 

 

解释:

继承方式:公有继承保护继承私有继承
父类中为公共权限子类中为公共权限子类中为保护权限子类中为私有权限
父类中为保护权限子类中为保护权限子类中为保护权限子类中为私有权限
父类中为保护权限子类中访问不到子类中访问不到子类中访问不到

保护权限和私有权限类外访问不到 

3.继承中的对象模型

#include<bits/stdc++.h>
using namespace std;

//公共页面类
class base
{
public:
	int pu;
protected:
	int pro;
private:
	int pri;
};

class son1 : public base
{
public:

	int a;
};

int main()
{
	son1 a;
	//父类中所有非静态成员属性都会被子类继承下去
	//父类中私有成员属性是被隐藏了,因此访问不到,但是确实被继承下去了
	cout << sizeof(a) << endl;
	return 0;
}

 

 

 

4.构造和构析顺序 

父类先构造,子类再构造,析构,父类最后析构。

#include<bits/stdc++.h>
using namespace std;

class father
{
public:
	father()
	{
		cout << "父类的构造函数" << endl;
	}
	
	~father()
	{
		cout << "父类的析构函数" << endl;
	}
};

class son : public father
{
public:
	son()
	{
		cout << "子类的构造函数" << endl;
	}
	
	~son()
	{
		cout << "子类的析构函数" << endl;
	}
};

int main()
{
	son s;
	return 0;
}

 

5.同名成员处理

 

 

#include<bits/stdc++.h>
using namespace std;

class father
{
public:
	father()
	{
		a = 100;
	}
	
	void func()
	{
		cout << "父类函数调用" << endl;
	}
	int a;
};

class son : public father
{
public:
	son()
	{
		a = 200;
	}
	
	void func()
	{
		cout << "子类函数调用" << endl;
	}
	
	int a;
};

int main()
{
	son s;
	
	cout << s.a << endl;
	//通过子类对象访问父类同名对象要加作用域
	cout << s.father::a << endl;
	
	s.func();
	s.father::func();
	
	return 0;
}

 

6.同名静态成员处理

 

#include<bits/stdc++.h>
using namespace std;

class father
{
public:
	static void func()
	{
		cout << "父类函数调用" << endl;
	}

	static int a;
};

int father::a = 200;

class son : public father
{
public:
	static void func()
	{
		cout << "子类函数调用" << endl;
	}
	
	static int a;
};

int son::a = 100;

int main()
{
	son s;
	
	//通过对象进行访问
	cout << s.a << endl;
	cout << s.father::a << endl;
	
	cout << "-------------------" << endl;
	
	//通过类名进行访问
	cout << son::a << endl;
	cout << son::father::a << endl;
	
	cout << endl;
	
    //通过对象进行访问
	s.func();
	s.father::func();
	
	cout << "-------------------" << endl;
	
	//通过类名进行访问
	son::func();
	son::father::func();
	
	return 0;
}

 

7.多继承语法

 

 

#include<bits/stdc++.h>
using namespace std;

class base1
{
public:  

	int a = 1000;
	
};

class base2
{
public:  

	int a = 2000;
	
};

class son : public base1,public base2
{
public:

	int b;
	int c;
};

int main()
{
	son s;
	
	cout << sizeof(s) << endl;
	
	cout << s.base1::a << endl;
	cout << s.base2::a << endl;
	
	return 0;
}

 

8.菱形继承 

图片示例:

 

 下面以animal,羊,骆驼,羊驼这四种动物为例:

 

虚继承

在继承之前加上virtual 

 

使用虚继承后sheep和tuo里存的会变为一个虚基类指针,共同指向m_age,避免了二义性。

 

代码示例: 

#include<bits/stdc++.h>
using namespace std;

class animal
{
public:

	int m_age;
};

class sheep : virtual public animal{};

class camel : virtual public animal{};

class alpaca : public sheep,public camel{};

int main()
{
	alpaca a;
	a.m_age = 10;
	
	cout << a.sheep::m_age << endl;
	cout << a.camel::m_age << endl;
	cout << a.m_age << endl;
	
	return 0;
}

 

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

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

相关文章

招募Sui大使,共同构建Sui社区,解锁专属福利

我们非常激动地宣布推出新一轮的Sui大使计划&#xff0c;这是围绕Sui创新技术构建全球社区的关键举措。 大使计划赋予了热衷于Sui使命并渴望在Sui社区和受众中传播意识的个人以权力。Sui大使体现了网络的价值观&#xff0c;并通过战略性和有影响力的行动加速了采用过程。我们很…

PFA洗气瓶配空气采样泵用PFA气体吸收瓶的特点

PFA洗气瓶是一种洗去气体中杂质的器皿&#xff0c;是将不纯气体通过选定的适宜液体介质鼓泡吸收&#xff08;溶解或由于发生化学反应&#xff09;&#xff0c;从而洗去杂质气体&#xff0c;以达净化气体的目的。在设计时&#xff0c;四氟球的周围都布满小孔。一般情况下&#x…

在字节划水的7年,太真实了。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 测试这条路是坎坷的&#xff0c;我自己深有体会。 我们的起点低…

02_debugfsLinux内核模块

01_basicLinux内核模块-CSDN博客环境IDubuntuMakefilemodules:clean:basic.creturn 0;运行效果。https://blog.csdn.net/m0_37132481/article/details/136157384?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136157384%22%2C%…

分享一个学英语的网站

名字叫&#xff1a;公益大米网​​​​​​​ Freerice 这个网站是以做题的形式来记忆单词&#xff0c;题干是一个单词&#xff0c;给出4个选项&#xff0c;需要选出其中最接近题干单词的选项。 答对可以获得10粒大米&#xff0c;网站的创办者负责捐赠。如图 触发某些条件&a…

红队APT-钓鱼篇_邮件钓鱼_Ewomail系统_网页克隆

目录 演示案例:Ewomail&Swaks-邮件伪造发信人Ewomail-邮件系统-搭建&使用Ewomail&Gophish-邮件加网页钓鱼网页钓鱼-克隆修改-二维码用户劫持网页钓鱼-克隆修改-Flash升级后门上线 演示案例: Ewomail&Swaks-邮件伪造发信人 发邮件的邮箱地址如果能伪造的话&am…

windows安装Mysql解压版

windows安装Mysql解压版 一、下载mysql-8.0.36-winx64.zip二、解压三、配置3.1. 添加环境变量&#xff1a;新建MYSQL_HOME3.2.如何验证是否添加成功&#xff1a;必须以管理员身份启动3.3. 初始化MySQL&#xff1a;必须以管理员身份启动3.4. 注册MySQL服务&#xff1a;必须以管理…

python-自动化篇-办公-将PDF文件转存为图片

因工作中的某些奇葩要求&#xff0c;需要将PDF文件的每页内容转存成按顺序编号的图片。用第三方软件或者在线转换也可以&#xff0c;但批量操作还是Python方便&#xff0c;所谓搞定办公自动化&#xff0c;Python出山&#xff0c;一统天下&#xff1b;Python出征&#xff0c;寸草…

【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论性能测试相关知识。入门阶段&#xff1a;认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试)&#xff0c;常用性能测试指标-(吞吐量、并发数、响应时间、点击数...)&#xff0c;性能测试工具选择。性能脚本&…

【STM32】软件SPI读写W25Q64芯片

目录 W25Q64模块 W25Q64芯片简介 硬件电路 W25Q64框图 Flash操作注意事项 状态寄存器 ​编辑 指令集 INSTRUCTIONS​编辑 ​编辑 SPI读写W25Q64代码 硬件接线图 MySPI.c MySPI.h W25Q64 W25Q64.c W25Q64.h main.c 测试 SPI通信&#xff08;W25Q64芯片简介&am…

IT行业高含金量证书全解析:开启职业生涯新篇章

在快速发展的IT行业&#xff0c;持续学习和专业认证是提升个人竞争力的重要途径。全球范围内存在着众多的IT认证&#xff0c;它们不仅能够验证你的技术能力&#xff0c;还能在求职和职业晋升中起到关键作用。 本篇博客将深入探讨IT行业中部分高含金量的证书&#xff0c;包括中…

探索设计模式的魅力:掌握命令模式-解锁软件设计的‘遥控器’

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 引言&#xff1a;探索命令模式的奥秘 软件设计领域充满挑战与机遇&#xff0c;命令模式…

MyBatis--08--分页插件PageHelper

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.分页插件PageHelper1.1 mysql中 limit 关键字含义1.2 PageHelper 官网https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md](ht…

C++学习Day05之函数调用运算符重载

目录 一、程序及输出二、分析与总结 一、程序及输出 #include<iostream> using namespace std; #include <string>class MyPrint { public:void operator()(string text){cout << text"运算符重载" << endl;} };void MyPrint2(string str) …

海外媒体发稿:8个提升影响力的日韩地区媒体发稿推广策略-华媒舍

在今天的数字化时代&#xff0c;媒体发稿推广成为企业和个人增加影响力的重要方式。特别是在日韩地区&#xff0c;这个拥有庞大媒体市场和活跃社交媒体用户的地区&#xff0c;正确的推广策略将对影响力的提升起到关键作用。我们将介绍8个提升影响力的日韩地区媒体发稿推广策略。…

C++智能指针的知识!

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家好呀&#xff0c;我是PingdiGuo_guo&#xff0c;今天我们来学习一下智能指针。 文章目录 1.智能指针的概念 2.智能指针的思想 3.智能指针的作用 3.1 自动内存管理 3.2 共享所有权 3.3 避免悬挂指针…

Linux第58步_备份busybox生成rootfs根文件系统

备份busybox生成rootfs根文件系统 打开终端 输入“ls回车” 输入“cd linux/回车” 输入“ls回车”&#xff0c;产看“linux”目录下的文件和文件夹 输入“cd nfs/回车”&#xff0c;切换到“nfs”目录 输入“ls回车”&#xff0c;产看“nfs”目录下的文件和文件夹 输入…

软件实例分享,台球厅收费系统电脑桌球店计时软件及灯控线路图教程

软件实例分享&#xff0c;台球厅收费系统电脑桌球店计时软件及灯控线路图教程 一、前言 以下软件程序教程以 佳易王桌球室计时计费软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、每个桌子对应的有 开台时间&#xff0c;所用的时…

为什么将二维码分解成文字? 二维码在线转文字的方法

将二维码分解成文字的主要目的是为了方便人们获取二维码中的信息便于使用。二维码是一种由黑白方块组成的图案&#xff0c;可以存储大量的数据&#xff0c;如网址、联系方式、产品信息等。然而&#xff0c;对于一些特定的场景或个人需求&#xff0c;无法直接扫描二维码。因此&a…

Java数字孪生智慧工地数据大屏APP项目源码

目录 智慧工地云平台核心功能 1.劳务管理 2.视频监控 3.安全教育 4.进度管理 5.环境监测 6.塔吊监控 7.升降机监控 8.工地广播 9.深基坑高支模 10.AI识别 11.安全质量 智慧工地建设的价值和意义 危大工程管理 智慧工地聚焦施工现场一线生产活动&#xff0c;利用物…