继承机制中的二义性分为:同名二义性和路径二义性。以下用两个图解释两种二义性的区别和解决方法:

(图画的丑不要介意)

如图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++中的同名二义性和路径二义性相关推荐

  1. springboot 请求路径有后缀_SpringBoot中配置Web静态资源路径的方法

    介绍: 本文章主要针对web项目中的两个问题进行详细解析介绍:1- 页面跳转404,即controller转发无法跳转页面问题:2- 静态资源文件路径问题. 项目工具: Intelij Idea, J ...

  2. 文法二义性与语言二义性

    文法二义性与语言二义性 文法二义性:如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的.如果文法含有二义性的句子,则称该文法是二义性的. 语言二义性:对于一个句子,有两种文法可以表示它,称 ...

  3. 使用Python批量合并多个工作簿中的同名工作表

    批量合并多个工作簿中的同名工作表 使用Python的xlwings模块批量合并多个工作簿中的同名工作表 import os import xlwings as xw import pandas as ...

  4. 查看python安装路径-在cmd中查看python的安装路径方法

    我相信一定有很多的人跟我一样,经常忘记Python安装的路径,每当用到的时候,最笨的办法就是在全局电脑里,直接查找Python,这样是肯定能查到的,但是如果你的电脑文件超级多,这将是一个工厂量很大的事 ...

  5. [VS2010]在C#工程中设置Reference的相对路径

    在C#工程中设置Reference的相对路径 罗朝辉 (http://kesalin.cnblogs.com/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 要在C#工程中 ...

  6. 图中长度为k的路径的计数

    Problem Description 题目给出一个有n个节点的有向图,求该有向图中长度为k的路径条数.方便起见,节点编号为1,2,-,n,用邻接矩阵表示该有向图.该有向图的节点数不少于2并且不超过5 ...

  7. python获取绝对路径_python3中获取文件当前绝对路径的两种方法

    方法1: import sys print(sys.argv) 得到文件当前绝对路径字符串的一个列表 ['D:/pycharm/PracticeProject/ClientServerNetworki ...

  8. 【错误记录】Visual Studio 中配置 NDK 头文件路径 ( NDK 的三个头文件路径 | 与 CPU 架构相关 asm 头文件路径选择 )

    文章目录 一.报错信息 二.解决方案 1.NDK 的三个头文件路径 2.与 CPU 架构相关 asm 头文件路径选择 一.报错信息 参考 [Android 逆向]Android 进程注入工具开发 ( ...

  9. Spring MVC中获取当前项目的路径

    Spring MVC中获取当前项目的路径 在web.xml中加入以下内容 <!--获取项目路径--><context-param><param-name>webAp ...

最新文章

  1. 短信通信的几种情况和CMS错误
  2. oracle ojvm generic,Oracle OJVM安全补丁
  3. 设计模式C++实现(4)——原型模式、模板方法模式
  4. 安全多方计算(MPC)从入门到精通:简易教程
  5. SpringCloud实战小贴士:版本依赖关系
  6. Udp---模拟实现客户端与服务器通信
  7. 【iOS开发】使用XCode 10添加Launch Image(启动图片)
  8. HTTPRunner学习笔记
  9. Mr.Jin系统发布报告——WIN7 WIN8双系统下的学习模式系统
  10. 使用python批量压缩图片文件
  11. 情缘难舍 愿为一叶扁舟
  12. 2016年9月16日-乔任梁逝世,陈乔恩发文悼念
  13. aws mediatailor运行原理图
  14. Zabbix 如何实现邮件报警通知以及免费短信报警通知
  15. 1.1 命题逻辑 笔记
  16. html中背景不平铺怎么写,css怎么让背景图片不平铺?
  17. Git commit 撤销提交与查看提交的内容
  18. autoIT 自动化上传/下载文件图文详解【python selenium】
  19. m基于遗传算法的城市生活垃圾回收网络优化matlab仿真
  20. EAS BOS:科目余额表、辅助账余额表

热门文章

  1. 移动端1px边框实现
  2. c++·C++游戏——海战棋
  3. 1949年的国庆节(10月1日)是星期六.......
  4. 支付宝支付API之签名与验签
  5. Dingo + Laravel + JWT + Entrust + memcache 实现API设计
  6. scrollIntoView 滚不动
  7. 数据库常用字段、列属性、表类型与SQLyog工具的使用
  8. 云计算在未来一年的发展预测
  9. 测绘行业如何?从业十年对测绘行业的薄见
  10. Wireshark实验——了解PDU