C++中的同名二义性和路径二义性
继承机制中的二义性分为:同名二义性和路径二义性。以下用两个图解释两种二义性的区别和解决方法:
或(图画的丑不要介意)
如图1:
D d;
d.x;此时d.x指的是C的x还是D的x,即出现了同名二义性。
如图2:
D d;
d.x;此时指的是B的x还是C的x,即出现了同名二义性。
解决方法一:用类名来限定d.C::x或d.B::x
解决方法二:同名覆盖
图3
如图三:
D d;
d.x;此时d.x指的是A的x还是D的x,即出现了路径二义性。
解决方法:
引入虚基类(用于有共同基类的多继承场合(多层共祖))
Class A
class B : virtual public A
class C : virtualpublic A
class D: public B, public C
在子类对象中,最远基类成分是唯一的。于是下面的访问是正确的:
D d;
d.x;//d可以调用最远基类的成员
/*实验题目1:多继承二义性的验证
(1)程序功能简介
设计一个完整程序验证多继承机制中的二义性问题。
(2)程序设计说明
① 对于多继承机制中的同名二义性,分别定义三个类:A、B和C。其中,类C分别从类A和类B公有继承而来。
在类A和类B的public区域中分别具有相同的数据成员x和成员函数showx(),类C中没有数据成员x和成员函数showx(),
则由类C创建的一个对象c在使用数据成员x和成员函数showx()时会产生同名二义性;② 对于多继承机制中的路径二义性,分别定义四个类:A、B、C和D。其中,类B和类C均从类A公有继承而来,类D从类
B和类C公有继承而来。在类A的public区域中具有数据成员x和成员函数showx(),类B、C、D中没有数据成员x和成员函数
showx(),则由类D创建的一个对象d在使用数据成员x和成员函数showx()时会产生路径二义性;③ 为上述类分别添加合适的构造函数,实现类的各自数据成员的初始化,并分别修改代码解决上述两种二义性;
④ 编写完整的程序并测试。*/
#include<iostream.h>
class A
{
public:int x;A(){x=1;}void showx(){cout<<x<<endl;}
};
//同名二义性
/*class B
{
public:int x;showx(){x=2;cout<<x<<endl;}
};
class C:public A,public B
{
};*/
//路径二义性
class B:public A
{
};
class C:public A
{
};
class D:public B,public C
{
public:int x;D(){x=4;}void showx(){cout<<x<<endl;}
};
void main()
{/*C test;test.A::showx();test.B::showx();*/D test2;test2.showx();//直接输出,输出的是D中的成员函数test2.B::showx();//输出A中成员函数
}
C++中的同名二义性和路径二义性相关推荐
- springboot 请求路径有后缀_SpringBoot中配置Web静态资源路径的方法
介绍: 本文章主要针对web项目中的两个问题进行详细解析介绍:1- 页面跳转404,即controller转发无法跳转页面问题:2- 静态资源文件路径问题. 项目工具: Intelij Idea, J ...
- 文法二义性与语言二义性
文法二义性与语言二义性 文法二义性:如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的.如果文法含有二义性的句子,则称该文法是二义性的. 语言二义性:对于一个句子,有两种文法可以表示它,称 ...
- 使用Python批量合并多个工作簿中的同名工作表
批量合并多个工作簿中的同名工作表 使用Python的xlwings模块批量合并多个工作簿中的同名工作表 import os import xlwings as xw import pandas as ...
- 查看python安装路径-在cmd中查看python的安装路径方法
我相信一定有很多的人跟我一样,经常忘记Python安装的路径,每当用到的时候,最笨的办法就是在全局电脑里,直接查找Python,这样是肯定能查到的,但是如果你的电脑文件超级多,这将是一个工厂量很大的事 ...
- [VS2010]在C#工程中设置Reference的相对路径
在C#工程中设置Reference的相对路径 罗朝辉 (http://kesalin.cnblogs.com/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 要在C#工程中 ...
- 图中长度为k的路径的计数
Problem Description 题目给出一个有n个节点的有向图,求该有向图中长度为k的路径条数.方便起见,节点编号为1,2,-,n,用邻接矩阵表示该有向图.该有向图的节点数不少于2并且不超过5 ...
- python获取绝对路径_python3中获取文件当前绝对路径的两种方法
方法1: import sys print(sys.argv) 得到文件当前绝对路径字符串的一个列表 ['D:/pycharm/PracticeProject/ClientServerNetworki ...
- 【错误记录】Visual Studio 中配置 NDK 头文件路径 ( NDK 的三个头文件路径 | 与 CPU 架构相关 asm 头文件路径选择 )
文章目录 一.报错信息 二.解决方案 1.NDK 的三个头文件路径 2.与 CPU 架构相关 asm 头文件路径选择 一.报错信息 参考 [Android 逆向]Android 进程注入工具开发 ( ...
- Spring MVC中获取当前项目的路径
Spring MVC中获取当前项目的路径 在web.xml中加入以下内容 <!--获取项目路径--><context-param><param-name>webAp ...
最新文章
- 短信通信的几种情况和CMS错误
- oracle ojvm generic,Oracle OJVM安全补丁
- 设计模式C++实现(4)——原型模式、模板方法模式
- 安全多方计算(MPC)从入门到精通:简易教程
- SpringCloud实战小贴士:版本依赖关系
- Udp---模拟实现客户端与服务器通信
- 【iOS开发】使用XCode 10添加Launch Image(启动图片)
- HTTPRunner学习笔记
- Mr.Jin系统发布报告——WIN7 WIN8双系统下的学习模式系统
- 使用python批量压缩图片文件
- 情缘难舍 愿为一叶扁舟
- 2016年9月16日-乔任梁逝世,陈乔恩发文悼念
- aws mediatailor运行原理图
- Zabbix 如何实现邮件报警通知以及免费短信报警通知
- 1.1 命题逻辑 笔记
- html中背景不平铺怎么写,css怎么让背景图片不平铺?
- Git commit 撤销提交与查看提交的内容
- autoIT 自动化上传/下载文件图文详解【python selenium】
- m基于遗传算法的城市生活垃圾回收网络优化matlab仿真
- EAS BOS:科目余额表、辅助账余额表
热门文章
- 移动端1px边框实现
- c++·C++游戏——海战棋
- 1949年的国庆节(10月1日)是星期六.......
- 支付宝支付API之签名与验签
- Dingo + Laravel + JWT + Entrust + memcache 实现API设计
- scrollIntoView 滚不动
- 数据库常用字段、列属性、表类型与SQLyog工具的使用
- 云计算在未来一年的发展预测
- 测绘行业如何?从业十年对测绘行业的薄见
- Wireshark实验——了解PDU