多继承的实例介绍

一、多继承同名覆盖

子类中的成员与父类中的成员同名问题,通过作用域分辨符(::)进行限定类的访问,从而实现对不同类中的同名成员各自赋值。

#include<iostream>
using namespace std;
class A{//父类A public:int val;void fun(){cout<<"Member of A,val值为:"<<val<<endl; }
};
class B{//父类B:两父类的成员名相同 public:int val;void fun(){cout<<"Member of B,val值为:"<<val<<endl; }
};
class C:public A,public B{//继承父类AB且成员名与父类的成员名相同 public:int val;void fun(){cout<<"Member of C,val值为:"<<val<<endl;}
};
int main()
{C c;c.val=1;//访问C类中的val变量 c.A::val=2;//通过作用域分辨符(::)限定访问成员的类 c.B::val=3;//限定访问B类中的val变量 c.fun();c.A::fun();//限定访问A类中的fun方法 c.B::fun(); }

运行结果
在这里插入图片描述

二、多层多继承二义性问题

多层继承:
在这里插入图片描述

#include<iostream>
using namespace std;
class A{public:int val;void fun(){cout<<"Member of A,val="<<val<<endl;}
};
class B:public A{//B继承A public:int val1;
};
class C:public A{//C继承Apublic:int val2;
};
class D:public B,public C//D继承B、C: 类D拥有两份在不同类下的同名拷贝
//二义性问题:对同一成员不同数据的多份拷贝,同一成员拥有不同数据 
{public:int val3;
};
int main()
{D d;d.B::val=3;//D中有两份不同的val与fun数据 d.C::val=5;d.B::fun();d.C::fun();
}

运行结果
在这里插入图片描述
出现二义性问题,即A类的同名成员有两份数据保存在内存中,为解决该问题,我们引入虚基类来标识其共同基(共同父类)来实现。

改进:将共同基(共同父类)定义为虚基类

#include<iostream>
using namespace std;
class A{public:int val;void fun(){cout<<"Member of A,val="<<val<<endl;}
};
class B:virtual public A{//B继承A public:int val1;
};
class C:virtual public A{//C也继承A:将两者共同父类设为虚基类,可实现同名成员在内存中只有一份拷贝 public:int val2;
};
class D:public B,public C{public:int val3;
};
int main()
{D d;d.B::val=3;d.C::val=5;//新赋的值会覆盖原来赋的值,val变量在内存中只会有一个值 d.B::fun();d.C::fun();d.fun(); } 

运行结果
在这里插入图片描述
通过虚基类实现同名成员的同一赋值。

三、赋值兼容性规则问题

赋值的单向性规则:
1.子类对象赋值给父类
2.子类对象初始化父类引用
3.子类对象地址赋给父类指针,且此时父类指针只能调用父类中的方法。

#include<iostream>
using namespace std;
class A{protected: int x;public:A(int x1=0):x(x1){}void print(){cout<<"A类中x="<<x<<endl;}
};
class B:public A{int y;public:B(int x1=0,int y1=0):A(x1){//子类B初始化父类A的引用y=y1;}void print(){cout<<"B类中x="<<x<<"\ty="<<y<<endl;}
};
class C:public A{int z;public:C(int x1=0,int z1=0) :A(x1){//子类C初始化父类A的引用 z=z1;}void print(){cout<<"C类中x="<<x<<"\tz="<<z<<endl;}
};
int main()
{A a(2);B b(3,4);//子类b对象将3赋值给A类中的x成员 C c(5,6);//子类c对象将5赋值给A类中的x成员 A *p[3]={&a,&b,&c};//定义父类A的指针,分别装B,C对象的地址 for(int i=0;i<3;i++)p[i]->print();//只能调用父类中的方法 b.print();c.print();}

运行结果
在这里插入图片描述

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

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

相关文章

基于SpringBoot的时间管理系统

基于SpringBoot的时间管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 用户界面 摘要 基于Spring Boot的时间管理系统是一款功能丰富…

基于国产ARM+FPGA+AD的验证和生产测试自动化

TestStand是一款测试执行软件&#xff0c;可帮助工程师在验证和生产环节加速开发和部署系统。 验证和生产测试自动化 TestStand可借助自身功能特性&#xff0c;实现用户所有测试系统中整个测试过程的自动化、提速和标准化: 调用和执行使用LabVIEW、Python、C/C或.NET编写的测…

Mybatis 简介(一)

这里使用的是3.5.11版本 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;P…

基于深度学习网络的手势识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default)load gnet.mat[Pr…

决策树完成图片分类任务

数据集要求&#xff1a; 训练集 和 验证集 &#xff08;要求分好&#xff09; 图片放置规则 &#xff1a; 一个总文件夹 放类别名称的子文件夹 其中子文件夹 为存放同一类别图片 举个例子 分类动物 则 总文件夹名称为动物 子文件夹为 猫 狗 猪猪 。。。 其中猫的文件夹里面…

IK分词器如何修改支持跨版本ES

一、问题描述&#xff1a;IK分词器版本和ES版本不一致&#xff0c;无法找到和自己ES版本匹配的分词器。 IK分词器&#xff0c;提供的插件版本&#xff0c;远赶不上ES的更新版本&#xff0c;在使用过程中&#xff0c;不一定能顺利的找到与自己使用的ES版本相对应。在ES集群中使用…

C++ string 类的其他操作

4.3.2 string 类的其他操作 在C新增string类之前,程序员也需要完成诸如给字符串赋值等工作。对于C语言式的字符串,程 序员使用C语言库中的函数来完成这些任务。头文件cstring(以前为string.h)提供了这些函数。例如,可 以使用函数 strcpy()将字符串复制到字符数组中,使用函数…

QTday05(TCP的服务端客户端通信)

实现聊天室功能 服务端代码&#xff1a; pro文件需要导入 network 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer>//服务端 #include <QTcpSocket>//客户端 #include <QList> #include <QMes…

Adobe产品2024

一、软件下载&#xff1a; http://dt4.8tupian.net/2/29913a1b2000.pg3二、软件介绍&#xff1a; Adobe公司旗下的产品在影视后期、平面设计等领域有着无可取代的地位。在创意和设计领域中&#xff0c;产品有多达 21 个&#xff0c;包括 Photoshop、Illustrator、InDesign、P…

【软件教程】如何用C++交叉编译出能在Android运行的ELF程序或so动态库

一、配置NDK交叉编译平台 1. 打开Android的官方ndk下载链接https://developer.android.com/ndk/downloads?hlzh-cn&#xff0c;下载windows 64位ndk环境包。 2. 解压后将具有以下文件的路径加入到系统环境变量。 3. 配置好环境变量&#xff0c;如下图所示&#xff0c;Path中存…

使用GoogleNet网络实现花朵分类

一.数据集准备 新建一个项目文件夹GoogleNet&#xff0c;并在里面建立data_set文件夹用来保存数据集&#xff0c;在data_set文件夹下创建新文件夹"flower_data"&#xff0c;点击链接下载花分类数据集https://storage.googleapis.com/download.tensorflow.org/exampl…

推荐几个程序员必逛的个人技术博客网站

1、美团技术团队 地 址: 美团技术团队简 介&#xff1a;美团技术团队的博客&#xff0c;干货满满。推荐指数&#xff1a;⭐⭐⭐⭐⭐ ​ 2、阮一峰的网络日志 地 址: 阮一峰的个人网站 - Ruan YiFengs Personal Website简 介&#xff1a;大神阮一峰&#xff0c;博客风格真正…

PHP 在线考试管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 在线考试管理系统是一套完善的web设计系统 layUI技术布局 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 在线考试系统1 代码 https://download.csdn.net/download/qq_41…

【31】c++设计模式——>模板方法模式

模板方法模式通常由以下几个部分组成&#xff1a; 1.抽象基类&#xff08;Abstract Base Class&#xff09;&#xff1a;抽象基类定义了一个算法的骨架&#xff0c;其中包含了模板方法和一些基本操作方法。模板方法在抽象基类中被声明为虚函数&#xff0c;它定义了算法的流程&…

制作macOS Ventura U盘启动盘教程

macOS 14更新一段时间了&#xff0c;发现某些应用不适配想要无损降级&#xff0c;如何进行macOS的降级呢&#xff0c;除了备份好的时间机器备份&#xff0c;还需要一个可以引导的macOS U盘安装器&#xff0c;如何制作macOS 13 Ventura 系统启动U盘呢&#xff0c;小编带来对新手…

线性表操作的实现--顺序表

本文参考朱战力老师的数据结构与算法--使用C语言一书 文章目录 前言 一、线性表是什么&#xff1f; 二、具体实现 1.顺序表的定义 2.初始化ListInitiate&#xff08;L&#xff09; 3.求当前元素个数ListLength&#xff08;L&#xff09; 4.插入元素ListInsert&#xff08;L&…

Ubuntu deadsnakes 源安装新版 python

前言 适用于 Ubuntu 安装 python3.11 等新版本。 因为比较常用并且不想重新编译就记录一下&#xff0c;方便以后面向CV安装。 安装 添加 deadsnakes ppa 源 sudo add-apt-repository ppa:deadsnakes/ppa更新 apt sudo apt update安装 python3.11 sudo apt install python…

电子元器件管理系统 JAVA语言开发

目录 一、系统介绍 二、系统下载 三、系统截图 一、系统介绍 基于VueSpringBootMySQL的电子元器件管理系统包含元器件单位模块、元器件仓库模块、元器供应商模块、元器件品类模块、元器件明细模块、元器件采购模块、元器件采购审核模块、元器件领用模块、学生元器件申请模块…

【华为路由器】配置企业通过5G链路接入Internet示例

场景介绍 5G Cellular接口是路由器用来实现5G技术的物理接口&#xff0c;它为用户提供了企业级的无线广域网接入服务&#xff0c;主要用于eMBB场景。与LTE相比&#xff0c;5G系统可以为企业用户提供更大带宽的无线广域接入服务。 路由器的5G功能&#xff0c;可以实现企业分支…

KNN(K近邻)水仙花的分类(含答案)

题目 以下采用K-NN算法来解决水仙花的分类问题&#xff0c;每个样本有两个特征&#xff0c;第一个为水仙花的花萼长度&#xff0c;第二个为水仙花 的花萼宽度&#xff0c;具体数据见表&#xff0c; 1&#xff09;设置k3&#xff0c; 采用欧式距离&#xff0c;分析分类精度为多少…