多重继承引起的二义性问题和虚基类
多重继承容易引起的问题就是因为继承的成员同名而产生的二义性问题。
例:类A和类B中都有成员函数display和数据成员a,类C是类A和类B的直接派生类
情况一:
class A
{public:int a;void display();
};
class B
{public:int a;void display;
};
class C:public A,public B//公用继承
{public:int b;void show();
};
如果在main函数中定义类C的对象c1并调用数据成员a和成员函数display
C c1;
c1.a=3;//引用c1的数据成员a
c1.dispaly();//调用c1的成员函数display
由于基类A和基类B都有数据成员a和成员函数display,编译系统无法判别要访问的是哪一个基类的成员,因此,程序编译出错。
解决方法1、用基类名来限定
c1.A::a=3;//引用c1对象中的基类A的数据成员a
c2.A::display();//引用c1的成员函数display
若派生类C中的成员函数show访问基类A的display和a,可以不必写对象名而直接写
c1.A::A=3;//引用c1对象中的基类A的数据成员a
c1.A::display();//调用c1对象中的基类A的成员函数display
不同的成员函数,只有在函数名和参数个数相同、类型相匹配的情况下才发生同名覆盖,如果只有函数名相同而参数不同,不会发生同名覆盖,而属于函数重载。
虚基类的作用:
C++提供虚基类的方法,使得在继承间接共同基类时只保留一份成员。
使用虚基类发方法:
class A//声明基类A
{.........};
class B:virtual public A//声明类B是类A的公用派生类,A是B的虚基类
{......};
class C:virtual public A//声明类C是类A的公用派生类,A是C的虚基类
{......};
注意:虚基类并不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的。
声明虚基类的一般形式为:
class 派生类名:virtual 继承方式 基类名
经过上面的声明后,当基类通过多条派生路径被一个派生类继承时,该派生类只继承该基类一次,也就是说,基类成员只保留一次。
二、虚基类的初始化
class A//定义基类A
{
A(int i){}//基类构造函数,有一个参数
.......};
class B:virtual public A//A作为B的虚基类
{
B(int n):A(n){}//类B构造函数,在初始化表中对虚基类初始化
...};
class C:virtual public A//A作为C的虚基类
{
C(int n):A(n){}
......};//类C的构造函数,在初始化表中对虚基类初始化
class D:public B,public C//类D的构造函数,在初始化表中对所有基类初始化
{
D(int n):A(n),B(n),C(n){}
......};
应用:
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:Person(string nam, char s, int a) {name = nam;sex = s;age = a;}
protected:string name;char sex;int age;
};
class Teacher :virtual public Person
{
public:Teacher(string nam, char s, int a, string t) :Person(nam, s, a){title = t;}
protected:string title;
};
class Student :virtual public Person
{
public:Student(string nam, char s, int a, float sco) :Person(nam, s, a){score = sco;}
protected:float score;
};
class Graduate :virtual public Teacher, public Student//Teacher和Student为直接基类
{
public:Graduate(string nam, char s, int a, string t, float sco, float w) :Person(nam, s, a), Teacher(nam, s, a, t), Student(nam, s, a, sco){wage = w;}void show(){cout << "name:" << name << endl;cout << "age:" << age << endl;cout << "sex:" << sex << endl;cout << "title:" << title << endl;cout << "score:" << score << endl;cout << "wage:<" << wage << endl;}
private:float wage;
};
int main()
{Graduate grad1("yan_tong", 'f', 24, "saadistant", 99.9, 3000);grad1.show();return 0;
}
运行结果:

相关文章:
多重继承引起的二义性问题和虚基类
多重继承容易引起的问题就是因为继承的成员同名而产生的二义性问题。 例:类A和类B中都有成员函数display和数据成员a,类C是类A和类B的直接派生类 情况一: class A {public:int a;void display(); }; class B {public:int a;void display; }; class C:…...
ciscn
ciscn Crypto部分复现 古典密码 先是埃特巴什密码(这个需要进行多次测试),然后base64,再栅栏即可 答案:flag{b2bb0873-8cae-4977-a6de-0e298f0744c3} _hash 题目: #!/usr/bin/python2 # Python 2.7 (6…...
智能的PHP开发工具PhpStorm v2024.1全新发布——支持PHPUnit 11.0
PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。 立即获取PhpS…...
Vue2+Element 封装评论+表情功能
有需要的小伙伴直接拿代码即可,不需要下载依赖,目前是初始版本,后期会进行代码的优化。 评论组件如下: 创建 comment.vue 文件。 表情组件 VueEmoji.vue 在评论组件中使用。 <template><div class"comment"…...
【k8s】存储 pvc 参数列表
相关文章: 【K8s】初识PV和PVC 【k8s】存储 pv 参数列表 【k8s】存储 pvc 参数列表 1. pv概述 2. 参数列表 [rootpaas-controller-3:/home/ubuntu]$ kubectl explain pvc.spec KIND: PersistentVolumeClaim VERSION: v1RESOURCE: spec <Object>DESCRI…...
数据集007:垃圾分类数据集(含数据集下载链接)
数据集简介 本数据拥有 训练集:43685张; 验证集:5363张; 测试集:5363张; 总类别数:158类。 部分代码: 定义数据集 class MyDataset(Dataset):def __init__(self, modetrain, …...
Spring常用注解(超全面)
官网:核心技术SPRINGDOC.CN 提供 Spring 官方文档的翻译服务,可以方便您快速阅读中文版官方文档。https://springdoc.cn/spring/core.html#beans-standard-annotations 1,包扫描组件标注注解 Component:泛指各种组件 Controller、…...
HQL面试题练习 —— 合并活动日期
目录 1 题目2 建表语句3 题解 1 题目 已知有表记录了每个大厅的活动开始日期和结束日期,每个大厅可以有多个活动。请编写一个SQL查询合并在同一个大厅举行的所有重叠的活动,如果两个活动至少有一天相同,那他们就是重叠的,请将他们…...
基于SVm和随机森林算法模型的中国黄金价格预测分析与研究
摘要 本研究基于回归模型,运用支持向量机(SVM)、决策树和随机森林算法,对中国黄金价格进行预测分析。通过历史黄金价格数据的分析和特征工程,建立了相应的预测模型,并利用SVM、决策树和随机森林算法进行训…...
Host头攻击-使用反向代理服务器或负载均衡器来传递路由信息
反向代理服务器的作用 安全性:反向代理服务器位于Web服务器之前,可以隐藏实际Web服务器的身份和地址,从而增加安全性。它还可以对客户端请求进行过滤和检查,以防止潜在的攻击。负载均衡:反向代理服务器可以将客户端请…...
AWS容器之Amazon ECS
Amazon Elastic Container Service(Amazon ECS)是亚马逊提供的一种完全托管的容器编排服务,用于在云中运行、扩展和管理Docker容器化的应用程序。可以理解为Docker在云中对应的服务就是ECS。...
win10/win11 优先调用大核的电源计划性能设置
前言 大小核,即Intel 12代开始的P-core(性能核,一般叫大核)和E-core(能效核,一般叫小核)异核架构。说下个人理解,就是英特尔为了增加cpu性能,但是又因为架构和功耗的限制…...
模型实战(20)之 yolov8分类模型训练自己的数据集
yolov8分类模型训练自己的数据集 yolov8,一个实时快速的端到端的集检测、分割、分类、姿态识别于一体的视觉算法库/框架本文将给出yolov8 分类模型的数据集制作格式及训练流程 1. 环境搭建 关于虚拟环境的搭建真的是老生常谈了,给出一个简单的搭建流程吧#新建虚拟环境 conda …...
好消息!PMP纸质证书可以领取啦!(22年11月至23年8月)
上周五,中国国际人才交流基金会官方发布了《关于2022年11月和2023年3月、5月、8月PMI认证考试证书领取》的通知,具体内容如下: 之前顺利通过PMP/ACP/PgMP考试的同学抓紧时间,在5月24日—6月10日内进入官网上登记领取证书。 PMP考…...
select函数(Unix系统)
select函数(Unix系统) 一、函数格式二、参数及返回值2.1 struct fd_set 结构体2.1 struct timeval 结构体2.3 函数参数2.4 返回值 三、用法举例3.1 监控终端输入内容 一、函数格式 #include <sys/time.h>#include <sys/types.h>#include <…...
设计模式16——策略模式
写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 策略模式(Strategy…...
Putty: 随心御剑——远程启动服务工具plink
一、引言:如何远程控制 也许你会有这样的场景,交互程序(以下简称UI程序)跑在windows端,而控制程序跑在Linux上。我们想要通过windows端 UI程序来启动Linux下面的服务,来一场酣畅淋漓的御剑飞行咋办,难道要自己十年磨一剑,在Linux下编写一个受控服务程序么.计算机科技发…...
Vectorworks 2024 Mac安装包下载Vectorworks 2024安装教程3D建模设计工具
安装 步骤 1,双击下载好的安装包,打开。 2,将G1DXHL.ldf拖到桌面上备用。 3,返回打开的镜像 选择install vectorworks2024 双击打开启动安装程序。电脑就90hi高腰腿疼痛和Y&Aaa9yY 4,输入电脑密码。 5࿰…...
CSRF 攻击详解
什么是csrf攻击? CSRF攻击(Cross-Site Request Forgery,跨站请求伪造)是一种常见的网络攻击方式,它利用网站对用户浏览器的信任,诱使用户在不知情的情况下发送恶意请求。这类攻击通常发生在用户已经通过身…...
单链表OJ题(课堂总结)
1.链表的带环问题 上图就是一个典型的带环链表 1.1如何判读链表是否带环? 最常见的方法就是利用快慢指针,快指针追加慢指针,当二者相等的时候即可判断链表带环 其实现的代码如下: bool hasCycle(struct ListNode*head) { s…...
实时反欺诈Agent部署失败率高达68%?金融IT总监亲述4类典型故障链及容灾切换黄金12分钟法则
更多请点击: https://codechina.net 第一章:实时反欺诈Agent部署失败率高达68%?金融IT总监亲述4类典型故障链及容灾切换黄金12分钟法则 某头部城商行在2023年Q3上线新一代实时反欺诈Agent集群后,监控平台显示首次部署成功率仅32…...
HarmonyOS万能卡片开发实战:游戏状态桌面实时展示与交互实现
1. 项目概述:当游戏遇见万能卡片最近在HarmonyOS 3.1上折腾一个挺有意思的东西:把游戏的关键信息,比如角色状态、资源数量、离线收益,甚至是一键快捷操作,直接做成一个“万能卡片”放在桌面上。这可不是简单的应用图标…...
超高频RFID芯片封装:1mm²极限空间与100标签/秒高速读取的技术挑战
1. 项目概述:为什么超高频RFID的IC封装如此关键?在自动化产线、智慧仓储和物流分拣这些追求极致效率的场景里,超高频RFID技术早已不是新鲜事物。但很多工程师在项目初期,往往把注意力集中在读写器选型、天线设计和软件算法上&…...
AP‑0316 语音模组实测:降噪 + 回声消除 + 全接口,一次搞定通话对讲所有痛点
做音频通话、门禁对讲、车载会议、IPC 拾音的工程师,大概率都被这几个问题折磨过:风扇、空调、风噪、敲击声压不住,通话糊成一团喇叭音量一大就啸叫、回声炸麦,全双工根本跑不起来主板音频电路复杂,ADC/DAC/ 功放还要自…...
源代码论文分享|基于 Spring Boot 的校园商铺管理系统!
很多同学选毕业设计时都会纠结:题目太简单,怕老师觉得没含金量;题目太复杂,又怕自己做不完。 其实像校园商铺管理系统这种项目,就挺适合拿来做毕设或课程设计。它有真实场景,功能也能展开,技术…...
AI Agent 运行时革命:从上下文牢笼到可审计的会话日志
1. 这不是新赛道,是 runtime 层的“操作系统时刻”来了 你有没有试过让一个 AI 代理连续工作四十分钟?不是闲聊,而是真正在查资料、调 API、写代码、改文档——一环扣一环地推进一个复杂任务。我去年就带着团队跑过这样一个销售线索深度分析 …...
为什么92%的团队误用Gemini做Java审查?资深架构师拆解3个致命配置陷阱及修复命令集
更多请点击: https://codechina.net 第一章:Gemini Java代码审查的真相与误区 Gemini 并非专为 Java 代码审查设计的工具,其底层模型(如 Gemini 1.5 Pro)虽具备强大的自然语言理解与代码生成能力,但缺乏静…...
FRED的光路和光路历史记录
对于杂散光分析,通常会使用“高级光线追迹”对话框,并选择“创建/使用光线历史文件”和“确定光路”选项。下面是对这两个选项的简要解释。确定光线路径选择此选项会使得FRED存储所有光路信息。这允许用户之后使用诊断工具,如光路追迹路径报告…...
DeepSeek-V4 详细解读
一、核心突破与整体定位 DeepSeek-V4 是 2026 年 4 月发布的新一代开源大模型,核心目标是解决长上下文的工程化落地难题,通过架构、训练和推理的全栈优化,实现了 "百万上下文能用、好用、日常用"。 整体技术路线 DeepSeek-V4 基于 "Transformer + DeepSeek…...
【下载安装教程】仿宋GB2312、楷体GB2312和方正小标宋简体办公字体安装包下载安装教程
常用办公字体安装与使用指南 适用字体及场景 字体名称适用场景仿宋_GB2312正文内容、正式文档楷体_GB2312批注、说明性文字方正小标宋简体标题、封面文字、强调性内容 支持软件 WPSMicrosoft WordPowerPoint其他主流办公软件 使用方法 安装字体 下载字体文件(.…...
