C++中多重继承(multiple inheritance) 的名称歧义(name ambiguity)

在多重继承中, 如果多个基类包含相同名字的成员函数, 则在派生类使用时, 容易发生歧义, 会导致出错;

解决方法是: 在派生类中重写基类方法, 覆盖原方法, 再指定基类范围(scope), 确定使用那个基类的方法, 可以避免歧义;

代码如下:

/*
 * cppprimer.cpp
 *
 *  Created on: 2014.1.10
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <iostream>
#include <string>  

struct Base1 {
    void print (void) {
        std::cout << "Base 1" << std::endl;}
};  

struct Base2 {
    void print (void) {
        std::cout << "Base 2" << std::endl;}
};  

struct Derived1 : public Base1, public Base2 {
    void print (void) { //重写基类方法
        Base1::print(); //指定使用何种
        Base2::print();
    }
};  

int main (void)
{
    Derived1 d1;
    d1.print(); //名字相同时, 会发生命名冲突!
}

输出:

Base 1
Base 2

作者:csdn博客 Spike_King

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, include
, 方法
, void
, 多重
, Inheritance
multiple
multiple inheritance、ambiguity、causal ambiguity、ambiguity aversion、ambiguity.dic,以便于您获取更多的相关知识。

时间: 2024-10-31 01:38:14

C++中多重继承(multiple inheritance) 的名称歧义(name ambiguity)的相关文章

C++:多重继承(multiple inheritance)歧义(ambiguous)

多重继承, 如果基类(base class)的成员函数名称相同,重载(overload)函数调用, 会忽略public和private, 选取最佳的匹配函数, 匹配度相同, 则会造成歧义, 产出错误:request for member 'xxx' is ambiguous, (GCC) 如需使用, 可以添加具体的域操作符, 指定类("class::method()"). 代码如下: /* * test.cpp * * Created on: 2014.04.14 * Author:

SQL Server 2005 中的 Multiple Active Result Set (MARS)

简介 所有 SQL Server 数据访问应用程序编程接口 (API) 都提供了一个抽象来表示会话和会话中的请求.SQL Server 2000 以及更早的版本限制编程模型,它要求任何时候一个给定的会话中最多只能有一个待定的请求.有几个替代办法被用来解决这种限制,在这些替代办法中,最常见的可能就是服务器端光标.SQL Server 2005 实现了 Multiple Active Result Set (MARS),它解除了这个约束.本文介绍了 MARS 的设计.结构和语义变更,以及为了从这些改

SD卡中常见的文件夹名称及其作用

SD卡中常见的文件夹名称及其作用如下: 系统数据类--系统文件存储相关文件夹 1..android_secure:官方app2sd的产物,存储了相关的软件使用认证验证,删除之后SD卡中的软件将无法使用. 2.Android:存放重要的程序数据,比如google:map的地图缓存,误删掉后地图还需重新下载. 3.backups:包含重要的备份文件,比如联系人导出到SD卡会导入到此文件夹. 4.bugtogo:系统出现问题的时候会形成一些报告文件,存放在此文件夹. 5.data:缓存数据文件夹,与A

代码-如何修改数据库中某一个字段的名称

问题描述 如何修改数据库中某一个字段的名称 我是新手 不会用在c#的wpf里 用代码修改 有没有大神给个代码 解决方案 修改数据库里字段的名称,和c#无关,需要用sql来实现 修改列名 ALTER TABLE TABLE_NAME RENAME COLUMN OLD_COLUMN_NAME TO NEW_COLUMN_NAME; 解决方案二: 修改字段就是用sql语句 sqlserver中有sp_rename存储过程http://www.cnblogs.com/ringnet/archive/2

sql2005-为什么DreaweaverCS4中链接数据库是数据源名称不能选择

问题描述 为什么DreaweaverCS4中链接数据库是数据源名称不能选择 想用DreaweaverCS4链接SQL2005IIS和数据源(ODBC)都已经设置好了,但是在DreaweaverCS4链接数据库是,数据源名称下来菜单什么也没有,选择"定义"之后也没反应,求帮助,谢谢啦 解决方案 就是这样

如何修改cxf默认生成wsdl中的wsdl:input message名称

问题描述 如何修改cxf默认生成wsdl中的wsdl:input message名称 最近在使用cxf2.6.10发布 webservice时,发现:cxf在对出入参数据类型进行描述时,默认入参为方法名,出参为方法名+Response.但由于项目对wsdl的描述有规定:出入参的类型描述名必须为方法名+Request/Response-- 所以想问问有哪位修改过cxf的wsdl生成规则,并对发布的wsdl调用通过. 我试过修改DefaultServiceConfiguration类的getInpu

java 线程池中如何自定义每个线程名称

问题描述 java 线程池中如何自定义每个线程名称 **java 线程池中如何自定义每个线程名称 java 线程池中如何自定义每个线程名称 ** 解决方案 补充下,线程池的创建线程池对象时,有一个参数是ThreadFactory类型,如果不传递,默认用的是DefaultFactory,我们可以自定义一个ThreadFactory然后作为参数传到进去,这个类里面就可以自定义线程池中创建的线程的名称.api: public ThreadPoolExecutor(int corePoolSize,in

finereport中导出excel如何自定义名称

问题描述 finereport中导出excel如何自定义名称 finereport中导出excel如何自定义名称,例如保存的名称就是我表单上 单号 的字段,现在都是默认的服务器名.xls,导出很多的时候全是重名(x)的形式.

android-从 OnCheckedChangeListener 的 CompoundButton中获取CheckBox key的名称

问题描述 从 OnCheckedChangeListener 的 CompoundButton中获取CheckBox key的名称 我使用接口 OnCheckedChangeListener,当点击 checbox 时 onCheckedChanged 方法被摧毁. 程序中有 10 个checkboxes.如何获取 CompoundButton 中点击的checkbox的名称?我觉得 CompoundButton 有所有需要的值,但是不知道怎么获取这个值. 例如: <CheckBox andro