多重继承引起的二义性问题和虚基类
多重继承容易引起的问题就是因为继承的成员同名而产生的二义性问题。
例:类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…...
解决Xcode真机调试常见问题:App ID限制与证书信任错误处理
Xcode真机调试全攻略:突破App ID限制与证书信任难题 1. 引言:为什么开发者需要掌握无证书调试? 在iOS开发过程中,真机调试是不可或缺的环节。然而,传统的证书配置流程繁琐复杂,尤其是对于独立开发者或小型…...
**遗传算法在路径优化中的创新应用:从理论到Python实战**在智能优化领域,**遗传算法(Genetic A
遗传算法在路径优化中的创新应用:从理论到Python实战 在智能优化领域,遗传算法(Genetic Algorithm, GA) 凭借其强大的全局搜索能力和对复杂问题的适应性,成为解决组合优化问题的重要工具。本文将深入探讨如何使用 Pyth…...
OpenClaw本地化优势:Qwen3-14b_int4_awq模型数据安全实践
OpenClaw本地化优势:Qwen3-14b_int4_awq模型数据安全实践 1. 为什么选择本地化部署 去年我在处理一批客户调研数据时,遇到了一个棘手问题——调研报告包含大量敏感信息,但团队需要AI辅助分析。当时尝试了几个云端方案,要么因为数…...
北京做网站SEO优化有什么技巧_北京做网站关键词优化需要多长时间
北京做网站SEO优化有什么技巧 在北京这样一个竞争激烈的市场,做网站SEO优化显得尤为重要。SEO(Search Engine Optimization,搜索引擎优化)是提升网站在搜索引擎结果中排名的关键手段,而北京的市场竞争尤其激烈&#x…...
OpenClaw多模态探索:Qwen3-32B驱动截图OCR与结构化数据处理
OpenClaw多模态探索:Qwen3-32B驱动截图OCR与结构化数据处理 1. 项目背景与需求场景 在日常工作中,我们经常遇到需要从截图或PDF文档中提取表格数据的情况。传统OCR工具虽然能识别文字,但往往无法保持表格结构,导致后续需要大量手…...
嵌入式系统中单例模式的应用与实现
1. 单例模式在嵌入式系统中的核心价值在资源受限的嵌入式环境中,全局状态管理一直是个棘手的问题。想象一下这样的场景:温度传感器模块认为系统运行正常,而控制模块却检测到了硬件故障,两个模块对系统状态的认知出现分歧ÿ…...
VEGA_SH1106嵌入式OLED驱动库:SH1106与XFP1116-07A适配指南
1. VEGA_SH1106库概述:面向XFP1116-07A型1.3英寸OLED显示模块的嵌入式驱动框架VEGA_SH1106是一个专为XFP1116-07A规格1.3英寸单色OLED显示屏设计的轻量级嵌入式驱动库。该库基于Adafruit SH1106图形库(Adafruit-GFX-Library)进行适配与裁剪&a…...
《深入理解Mybatis原理》MyBatis数据源与连接池详解
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
产业园区如何降低科技服务搭建成本?
观点作者:科易网-国家科技成果转化(厦门)示范基地一、现状概述:科技服务搭建的“高门槛”与“低效率” 产业园区作为区域创新的核心载体,近年来在政策红利与产业集聚的双重驱动下蓬勃发展。然而,传统科技服…...
基于MATLAB平台PCA的人脸识别:开启识别新征程
基于MATLAB平台PCA的人脸识别,程序已调通,可将自己的数据替换进行识别。 得到识别准确率结果。最近在研究人脸识别技术,基于MATLAB平台利用PCA(主成分分析)实现了一个人脸识别程序,现在跟大家分享分享。 PC…...
