C++_菱形继承(虚继承)

菱形继承 and 虚继承

  • 菱形继承介绍
    • 菱形继承源码
    • 菱形继承运行结果
  • 虚继承介绍
    • 虚继承源码
    • 虚继承运行结果

菱形继承介绍

本文主要介绍菱形继承基本操作(仅附源码 and 运行结果)
1.正常菱形继承 会产生 在孙子类 中产生两个 不同的基类
菱形继承逻辑图
在这里插入图片描述

菱形继承源码

#include<iostream>
#include<string>using namespace std;
//基类 A(爷爷类)
class A
{
public:A(){cout << "A构造" << endl;}~A(){cout << "A析构" << endl;}int m_a;
};
//子类 X(父类)
class X:public A
{
public:X(){cout << "X构造" << endl;}~X(){cout << "X析构" << endl;}
};
//子类 Y(母类)
class Y :public A
{
public:Y(){cout << "Y构造" << endl;}~Y(){cout << "Y析构" << endl;}
};
//子类 Z(孙子类)
class Z :public X, public Y
{
public:Z(){cout << "Z构造" << endl;}~Z(){cout << "Z析构" << endl;}
};
void main()
{
//菱形继承//构造析构流程{Z z;//z.m_a = 10;//继承不明确cout << "------------分隔符------------" << endl;//菱形继承调用方法z.X::m_a = 10;z.Y::m_a = 20;cout << z.X::m_a << " " << z.Y::m_a << endl;cout << "------------分隔符------------" << endl;}system("pause");
}

菱形继承运行结果

A构造
X构造
A构造
Y构造
Z构造
------------分隔符------------
10 20
------------分隔符------------
Z析构
Y析构
A析构
X析构
A析构
请按任意键继续. . .

虚继承介绍

1.加上关键词 virtual 所继承的基类将只构造一次
2.菱形虚继承 只产生一个 基类
2.虚继承逻辑图
>在这里插入图片描述
3.虚继承 取地址图
在这里插入图片描述

虚继承源码

#include<iostream>
#include<string>using namespace std;
//基类 A(爷爷类)
class A
{
public:A(){ cout << "A构造" <<" 地址:"<< this << endl; }~A(){ cout << "A析构" << endl; }int m_a;
};
//子类 X(父类)
class X:virtual public A
{
public:X(){ cout << "X构造" << " 地址:" << this << endl; }~X(){ cout << "X析构" << endl; }
};
//子类 Y(母类)
class Y :virtual public A
{
public:Y(){ cout << "Y构造" << " 地址:" << this << endl; }~Y(){ cout << "Y析构" << endl; }
};
//子类 Z(孙子类)
class Z :public X, public Y
{
public:Z(){ cout << "Z构造" << " 地址:" << this << endl; }~Z(){ cout << "Z析构" << endl; }
};
void main()
{
//菱形虚继承//构造析构流程{Z z;//z.m_a = 10;//继承不明确cout << "------------分隔符------------" << endl;//虚继承调用方法(此时通过不同的子类调用的 m_a 将是同一个)z.X::m_a = 10;z.Y::m_a = 20;cout << z.X::m_a << " " << z.Y::m_a << endl;cout << "取地址:" << &z.X::m_a << " " << &z.Y::m_a << endl;cout << "------------分隔符------------" << endl;}system("pause");
}

虚继承运行结果

A构造 地址:0075FD70
X构造 地址:0075FD68
Y构造 地址:0075FD6C
Z构造 地址:0075FD68
------------分隔符------------
20 20
取地址:0075FD70 0075FD70
------------分隔符------------
Z析构
Y析构
X析构
A析构
请按任意键继续. . .

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

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

相关文章

某金属加工公司的核心人才激励体系搭建项目纪实

【客户行业】金属加工行业 【问题类型】薪酬体系/激励体系 【客户背景】 某大型金属加工企业位于河北地区&#xff0c;成立于2000年&#xff0c;隶属于某大型有色金属集团&#xff0c;是一家集科研、开发、生产、销售于一体的国有企业&#xff0c;人员达到1000人。经过多年…

Linux内核--进程管理(九)Linux内核进程管理进程优先级

目录 一、引言 二、NICE值(静态优先级) 三、优先级和实时进程 ------>3.1、chrt ------>3.2、实时/非实时进程的区 四、O1调度 ------>4.1、多核平均负载指数 ------>4.2、O1调度器处理流程 五、CFS完全公平调度 ------>5.1、产生调度的时机 ------&…

微信小程序使用mqtt开发可以,真机不行

以下可以解决我的问题&#xff0c;请一步一步跟着做&#xff0c;有可能版本不一样就失败了 一、下载mqtt.js 前往蓝奏云 https://wwue.lanzouo.com/iQPdc1k50hpe 下载好后将.txt改为.js 然后放入项目里 二、连接mqtt const mqtt require(../../utils/mqtt.min); let cli…

关于“Python”的核心知识点整理大全64

目录 20.2.15 确保项目的安全 settings.py 20.2.16 提交并推送修改 20.2.17 创建自定义错误页面 1. 创建自定义模板 500.html settings.py settings.py 注意 views.py 20.2.18 继续开发 往期快速传送门&#x1f446;&#xff08;在文章最后&#xff09;&#xff1a…

LiveGBS流媒体平台GB/T28181常见问题-国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道

LiveGBS国标GB28181中国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道 1、什么是国标编号&#xff1f;2、国标设备ID和通道ID3、ID 统一编码规则4、搭建GB28181视频直播平台 1、什么是国标编号&#xff1f; 国标GB28181对接过程中&#xff0c;可能有的小…

自然语言处理4——深度学习驱动情感分析 - Python高级实践

写在开头 在当今数字化时代,大数据和自然语言处理(NLP)技术的蓬勃发展使得情感分析在企业和社交媒体等领域得到广泛应用。其中,深度学习作为NLP领域的一项重要技术,为情感分析任务的处理提供了强大的工具。本文将介绍深度学习在情感分析中的应用,并通过Python中主要的深…

2022年中职组“网络安全”赛项湖南省B-3——私钥泄漏

B-3&#xff1a;应用服务漏洞扫描与利用 任务环境说明&#xff1a;需要环境有问题可以加q 服务器场景&#xff1a;Server15服务器场景操作系统&#xff1a;未知&#xff08;关闭链接&#xff09; 使用命令nmap探测目标靶机的服务版本信息&#xff0c;将需要使用的参数作为FLA…

用通俗易懂的方式讲解:结合检索和重排序模型,改善大模型 RAG 效果明显

最近出现了在构建聊天机器人方面的应用浪潮&#xff0c;这主要得益于LlamaIndex 和 LangChain 这样的框架。许多这类应用都采用了用于检索增强生成&#xff08;RAG&#xff09;的标准技术栈&#xff0c;其中包括以下关键步骤&#xff1a; 向量存储库&#xff1a; 使用向量存储库…

若依前后台分离项目不想配nginx部署方案

若依前后台分离框架不使用Nginx部署项目 1、修改ResourcesConfig 文件 以下是完整文件 Configuration public class ResourcesConfig implements WebMvcConfigurer {Autowiredprivate RepeatSubmitInterceptor repeatSubmitInterceptor;Overridepublic void addResourceHand…

数据库——SQL注入攻击

【实验内容及要求】 一、内容&#xff1a;掌握SQL注入攻击的原理&#xff0c;掌握基本SQL注入攻击的方法&#xff0c;掌握防SQL注入攻击的基本措施。 二、要求&#xff1a; 1. DVWA环境配置 DVWA&#xff08;Damn Vulnerable Web Application&#xff09;是一个用来进行安全…

leetcode算法题之递归--深度优先搜索总结

文章目录 1.全排列2.子集 1.全排列 全排列 class Solution {vector<vector<int>> ret;vector<int> path;bool check[7];//标记nums数组某个下标是否已访问&#xff0c;剪枝使用 public:vector<vector<int>> permute(vector<int>& n…

计算机组成原理 指令流水线

文章目录 指令流水线指令流水线的概念流水线性能分析流水线的吞吐率流水线的加速比流水线的效率 影响流水线的因素结构相关 (资源冲突)数据相关 (数据冲突)控制相关 (控制冲突) 流水线分类超量流水线 指令流水线 #mermaid-svg-vSsJnNqZf24LgjVK {font-family:"trebuchet m…

Linux 修改主机名称并通过主机名称访问服务器

一、命令提示符简介 当我们打开终端的时候&#xff0c;我们要输入命令的左边就是命令提示符&#xff0c;如下图&#xff0c;接下来介绍下他们分别代表什么含义 1、root 和 xhf 表示的是当前登录的用户名称。 2、node2 表示的当前的主机名称。 3、~ 表示的是当前的目录 4、# 表示…

基于缺陷模式的软件测试

基于缺陷模式的软件测试是一种常见的软件测试方法&#xff0c;旨在发现和识别软件系统中可能存在的缺陷模式。它通过分析过去的软件缺陷数据&#xff0c;构建缺陷模式库&#xff0c;并基于这些模式来设计测试用例。 该方法的基本步骤如下&#xff1a; 收集缺陷数据&#xff1a…

Python中__call__属性的使用指南详细解析

概要 在Python中&#xff0c;类可以具有许多特殊方法&#xff0c;以控制其行为。其中之一是__call__方法&#xff0c;它使一个类的实例可以像函数一样被调用。本文将深入探讨__call__方法的用途、示例和实际应用。 __call__方法的基本用法 __call__方法可以将一个类的实例作为…

【数据结构和算法】字符串解码

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 什么情况会用到栈 2.2 方法一&#xff1a;辅助栈法 三、代码 3.1 方法一&#xff1a;辅助栈法 四…

十年磨一剑

随着不停的优化和改进&#xff0c;JRT开发已经接近尾声&#xff0c;计划过年时候低调发布JRT1.0&#xff0c;框架目标&#xff1a;只做信创下的医疗龙头而不是信创下的苟活着。 十年前&#xff0c;我从南京踏上去沈阳的火车&#xff0c;去东北参加三方协议的启航计划&#xff…

DS|图(拓扑排序和最短路径)

题目一&#xff1a;DS图 -- 图的最短路径&#xff08;无框架&#xff09; 题目描述&#xff1a; 给出一个图的邻接矩阵&#xff0c;输入顶点v&#xff0c;用迪杰斯特拉算法求顶点v到其它顶点的最短路径。 输入要求&#xff1a; 第一行输入t&#xff0c;表示有t个测试实例 …

嵌入式实时操作系统的设计与开发——启动内核

RTOS的引导模式 RTOS的引导是指将操作系统装入内存并开始执行的过程。 在嵌入式系统的实际应用中&#xff0c;针对不同应用环境&#xff0c;对时间效率和空间效率有不同的要求。 时间限制主要包括两种情况&#xff1a;系统要求快速启动和系统启动后要求程序能实时运行。空间限…

人工智能:模拟人类智慧的科技奇迹

人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;作为一项模拟人类智慧行为的科学与技术&#xff0c;正以惊人的速度改变着我们的世界。它旨在让计算机系统具备感知、推理、学习、决策和交互等人类智慧的能力&#xff0c;成为当今科技领域的巨大突破…