C++基础14-类和对象之多继承与虚继承

多继承:一个类有多个直接基类的继承关系称为多继承

总结:

1、一般将具有菱形样式继承方式的某些类声明为虚继承

3、虚继承的主要目的是为了防止二义性

2、虚继承就是在继承方式前加virtual

如果一个派生类从多个基类派生,而这些基类有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性

如:

虚继承virtual

如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性

如果在多条继承路径上有一个公共的基类,那么在继承路径的某处 汇合点,这个公共基类就会在派生类的对象中产生多个基类子对象 要使这个公共基类在派生类中只产生一个子对象,必须对这个基类声明为虚继承,使这个基类成为虚基类

虚继承声明使用关键字 virtual

多继承:

#if 1
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;#if 0
//多继承案例
//家具类
class Furniture
{
};//将父亲类继承爷爷类  改成虚继承, 防止儿子在多继承我的时候,出现爷爷中的变量会拷贝多份。
class Bed :public Furniture
{
public:void sleep() {cout << "在床上睡觉" << endl;}
};class Sofa :public Furniture
{
public:void sit() {cout << "在沙发上休息" << endl;}
};//沙发床
class SofaBed :public Bed, public Sofa
{
public:void SleepAndSit() {sleep();sit();}
};
void test01() {Bed b;b.sleep();Sofa s;s.sit();cout << " ------ " << endl;SofaBed sb;sb.SleepAndSit();
}
#endif//家具类
class Furniture
{
public:int m; //材质Furniture() {m = 0;}
};//将父亲类继承爷爷类  改成虚继承, 防止儿子在多继承我的时候,出现爷爷中的变量会拷贝多份。
class Bed :virtual public Furniture
{
public:Bed() {m = 1;}void sleep() {cout << "在床上睡觉" << endl;}
};class Sofa :virtual public Furniture
{
public:Sofa() {m = 2;}void sit() {cout << "在沙发上休息" << endl;}
};//沙发床
class SofaBed :public Sofa,public Bed
{
public:SofaBed() {//m = 3;}void SleepAndSit() {sleep();sit();}
};void test01() {SofaBed s;cout<<s.m<<endl;  //将父亲的继承方式改为虚继承。这样在s中就只有一个爷爷中的数据成员//否则在s中分别有从Bed和Sofa中继承的m,s去访问 会有指向不明确的说法//情况1:当SofaBed的构造函数中m=3时,s.m=3//情况2:当SofaBed的继承方式为public Sofa,public Bed时, s.m=1//情况3:当SofaBed的继承方式为public Bed,public Sofa时,s.m=2//当前继承情况下:cout << s.Furniture::m << endl;//1cout << s.Bed::m<<endl; //1cout << s.Sofa::m<<endl;//1}
int main(void)
{test01();return 0;
}
#endif

虚继承:

#if 1
#include<iostream>
using namespace std;
class GrandPa {
public:int m;GrandPa() {cout << "GrandPa()" << endl;}
};
class Parent1 :public GrandPa {
public:Parent1() {cout << "Parent1()" << endl;}};
class Parent2 :public GrandPa {
public:Parent2() {cout << "Parent2" << endl;}
};
class Son :public Parent1, public Parent2 {
public:Son() {cout << "Son()" << endl;}
};
void test01() {Son s;
}
/*
GrandPa()
Parent1()
GrandPa()
Parent2
Son()
*/
void test02() {Son s;//s.m; //直接访问编译错误 不明确 此时的m是Parent1还是Parent2还是Grandpacout<<s.Parent1::m<<endl;cout<<s.Parent2::m<<endl;cout<<s.GrandPa::m<<endl;
}
/*
GrandPa()
Parent1()
GrandPa()
Parent2
Son()
-858993460
-858993460
-858993460
*/
int main() {//test01();test02();return 0;
}
#endif

 

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

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

相关文章

linux系统安装ntp,CentOS下NTP安装配置

安装yum install ntp配置文件 /etc/ntp.confrestrict default kod nomodifynotrap nopeer noqueryrestrict -6 default kod nomodify notrap nopeer noqueryrestrict 127.0.0.1restrict -6 ::1# 用restrict控管权限# nomodify - 用户端不能更改ntp服务器的时间参数# noquery - …

C++基础15-类和对象之多态

总结&#xff1a; 1、在父类中申明虚函数时&#xff0c;一般情况下在子类中也申明&#xff08;便于读代码&#xff09; 一、赋值兼容 赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。 赋值兼容是一种默认行为,不需要任何的显示的转化步骤。 …

傲云浏览器linux,Centos7安装部署zabbix监控软件

目录部署监控服务器部署监控服务器Zabbix ServerWeb页面验证设置部署监控服务器一、安装LNMP环境Zabbix监控管理控制台需要通过Web页面展示出来&#xff0c;并且还需要使用MySQL来存储数据&#xff0c;因此需要先为Zabbix准备基础LNMP环境。1. wget下载官网Nginxwget http://ng…

c语言环境变量的作用,C语言获取系统环境变量

C语言获取系统环境变量可以通过如下代码实现.#include #include char *platform(){//获取系统变量信息char *ret;extern char **environ;char **env environ;//打印系统变量信息/*while(*env){//puts(*env);env;}*/ret getenv("OS"); //for windows_ntif(NULL ! re…

mysql索引创建及使用注意事项

总结&#xff1a; 1、在使用索引时&#xff0c;一般情况下不建议使用like操作。如果使用&#xff0c;则%放在后面。否则不会使用索引。like ‘%abd%’不会使用索引,而like ‘aaa%’可以使用索引.&#xff08;最左缀原则&#xff09; 2、单列索引的使用&#xff1a; 《1》 只…

mulitpartfile怎么接收不到值_和平精英信号接收区和信号值是什么?信号值怎么恢复...

[闽南网]和平精英公测开启&#xff0c;和平精英与刺激战场有什么不同呢&#xff1f;今天小编就为大家带来了信号值详解&#xff01;各位玩家千万不要错过呀&#xff01;信号值详解信号接收区和信号值是什么&#xff0c;对选手有什么影响&#xff1f;在游戏战斗界面中&#xff0…

制备pdms膜的方法_船体用钢板基底超疏水表面的制备和性能

鲨鱼皮具有神奇的微纳双层结构&#xff0c;其微米级肋条状结构在水中的整流效果可减小水的阻力。纳米级刺状突起或刚毛具有疏水特性&#xff0c;使植物抱子很难附着其上&#xff0c;海藻等植物也不能在其表面生长&#xff3b;1,2&#xff3d;。这种微纳结构及其疏水性的共同作用…

递归题型解析

#include<iostream> using namespace std; int foo(int n) {if (n < 1)return n;return (foo(n - 1) foo(n - 2)); } int main() {printf("%d\n", foo(5));return 0; } 解析&#xff1a; foo(5)foo(4)f00(3)foo(3)foo(2)foo(3)2foo(3)foo(2)2(foo(2)foo(1…

64位c语言调用32位glibc,glibc fclose源代码阅读及伪造_IO_FILE利用fclose实现任意地址执行...

简介最近学习了一下_IO_FILE的利用&#xff0c;刚好在pwnable.tw上碰到一道相关的题目。拿来做了一下&#xff0c;遇到了一些困难&#xff0c;不过顺利解决了&#xff0c;顺便读了一波相关源码&#xff0c;对_IO_FILE有了更深的理解。文章分为三部分&#xff0c;分别是利用原理…

戴尔笔记本电脑开机黑屏怎么办_戴尔笔记本电脑充不进电怎么办

笔记本电脑电池充不进电要怎么办呢&#xff1f;笔记本电脑之所以这么受欢迎&#xff0c;是因为笔记本有配备电池&#xff0c;能够在没有电源的情况下使用五六个小时。而电池的电用光后&#xff0c;就需要进行充电。不过有些用户反映说&#xff0c;自己的电池充不进电&#xff0…

IIS安装2个SSL_顶级域名0元撸-免费注册2个腾讯云域名 免费SSL证书

前言这两天折腾甜糖CDN&#xff0c;为了收益最大化申请了公网IP&#xff0c;于是顺带折腾了一下群晖外网访问。使用的DDNS方案是腾讯dnspod&#xff0c;注册一个便宜的顶级域名访问我的群晖&#xff0c;折腾过程中发现可以免费注册2个顶级域名&#xff0c;不敢独享发出来大家一…

三菱a系列motion软体_工控电缆如何制作?(以三菱PLC、触摸屏为例)

RS232接口的三菱Q系列PLC编程通讯电缆三菱GT11/GT15触摸屏RS232串口编程电缆三菱GT11/GT15触摸屏连接Q系列PLC电缆三菱GT11/GT15触摸屏连接FX2/FX2C/A/QnA系列PLC电缆三菱GT11/GT15 触摸屏连接FX3U/FX2N/FX1N系列PLC电缆FX2、A系列PLC到A970GOT人机介面连接电缆FX0s/FX0n/FX2n/…

电脑入门完全自学手册_「新书推荐」新能源汽车维修完全自学手册

《新能源汽车维修完全自学手册》作者&#xff1a;广州瑞佩尔信息科技有限公司 、胡欢贵售价&#xff1a;85.00上市时间&#xff1a;2020年7月本书内容分为 8 章, 第 1 章为高压安全系统, 主要介绍了新能源汽车中高压安全防护装置构造以及维修所需的安全防护工具、 安全作业规范…

C/C++混淆点-左移右移操作符

对一个数实行左移或者右移操作&#xff0c;即先把操作数转换为二进制&#xff0c;然后左移&#xff08;>>&#xff09;即从左到右开始舍弃&#xff0c;右移&#xff08;<<&#xff09;即从各位之后开始加0。最后再转换为十进制。 #include<iostream> using…

ar路由器 pppoe下发ipv6 dns_IPv6网络设置各种疑难杂症诊疗区

1、Windows电脑系统IPv6无网络访问权限怎么解决&#xff1f;Win7系统下连接IPv6无网络访问权限的解决方法&#xff08;1&#xff09;首先修复网络连接&#xff0c;Win XP操作系统的网络连接有“修复”选项&#xff0c;Win7没有&#xff0c;不过可以使用“诊断”选项&#xff0c…

c语言判断化学方程式,下列是某同学写的六个化学方程式:①Mg+O2点燃.MgO2②C+O2点燃.CO...

化学方程式是最重要的化学语言&#xff0c;正确、熟练地书写化学方程式是学习化学必需具备的重要基本功。怎样书写化学方程式?1.要遵循两个基本原则(1)以客观事实为基础化学方程式既然是化学反应的表达形式&#xff0c;显然&#xff0c;有某一反应存在&#xff0c;才能用化学方…

tensorboard ckpt pb 模型的输出节点_“技术需求”与“技术成果”项目之间关联度计算模型 TOP10 baseline...

竞赛网址&#xff1a;传送门线上分数&#xff1a;0.78490746000&#xff0c;目前可以进入前10参考了苏神的代码&#xff0c;非常感谢&#xff1a;传送门调参技巧&#xff1a;传送门中文bert权重&#xff1a;传送门#! -*- coding:utf-8 -*-

白盒测试六种方法案例分析

1、语句覆盖 2、判定覆盖 3、条件覆盖 4、判定/条件覆盖 5、组合覆盖 6、路径覆盖

android 启动优化方案,Android 项目优化(五):应用启动优化

介绍了前面的优化的方案后&#xff0c;这里我们在针对应用的启动优化做一下讲解和说明。一、App启动概述一个应用App的启动速度能够影响用户的首次体验&#xff0c;启动速度较慢(感官上)的应用可能导致用户再次开启App的意图下降&#xff0c;或者卸载放弃该应用程序。应用程序启…

排序总结

排序总结 快速排序基本思路&#xff1a; 基本思想&#xff1a; 1&#xff09;选择一个基准元素,通常选择第一个元素或者最后一个元素, 2&#xff09;通过一趟排序讲待排序的记录分割成独立的两部分&#xff0c;其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值…