c++中 二义性

#include <iostream>
using namespace std;

class Base{
    public:
        Base(){
            cout << "Base called..." << endl;
        }
        void print() {
            cout << "Base ::print()" << endl;                                   
        }
};

class Sub{
    public:
        Sub(){
            cout << "Sub called..." << endl;
        }
        void print(){
            cout << "Sub print...." << endl;
        }
};
class Child: public Base, public Sub{
    public:
        Child(){
            cout << "Child called..." << endl;
        }

};

int main(void){

    Child c;
    //c.print();报错,这里c类中的有两个print()函数,它们的地位相同
    c.Base::print();
    c.Sub::print();
    return 0;
}
时间: 2024-08-26 12:42:50

c++中 二义性的相关文章

C++中继承的性质

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类性质的基础上进行扩展,增加功能. 继承的定义的格式: class 派生类名:继承类型 基类名 继承类型包括有:public(公有继承) private(私有继承) protected(保护继承) 继承关系 基类的public成员 基类的private成员 基    类    的protected成员 继承引起的访问控制变化 public public成员 不可见 protected成员 非私有成员在子类中的访问属性不

《COM本质论》读书笔记

前言 虽然一直都不喜欢Windows的应用开发,不过由于现在工作需要,必须对 Win32 开发非常熟悉. Windows 上的 C++ 开发,逃不过对组建对象模型COM(Component Object Model)编程的学习和理解,尤其是游戏.音视频领域 —— Direct3D/Direct2D/DirectShow/DirectSound 等等.COM已经是上个世纪的产物了,所以相关的学习资料也都很老了,不过<COM本质论>是一本不错的入门书.在此我做做笔记加深理解. 第1章:COM是一个

《C和C++程序员面试秘笈[精品]》-笔记

2015-12-16 原文:在C++中可以通过域操作符"::"来直接操作全局变量 2015-12-16 原文:后缀式(i++)必须返回对象的值,所以导致在大对象的时候产生了较大的复制开销,引起效率降低.因此处理使用者自定义类型(注意不是指内建类型)的时候,应该尽可能地使用前缀式递增/递减,因为它天生"体质"较佳. 2015-12-16 原文:内建数据类型的情况,效率没有区别. 自定义数据类型的情况,++i效率较高. 2015-12-16 原文:当表达式中存在有符号类

Flex的正则表达式匹配速度与手工代码的比较

flex是一个词法分析器生成器,它是编译器和解释器编程人员的常用工具之一.flex的程序主要由一系列带有指令(称为动作代码)的正则表达式组成.在匹配输入时,flex会将所有的正则表达式翻译成确定性有穷自动机,这使得flex等词法分析器生成器生成的词法分析器匹配输入模式的效率非常高.当然,有人指责flex不够灵活,功能有限,很多问题都无法解决,比如Javascript.C++等语言中二义性的问题,实际上很多程序(比如Python的解释器)的词法分析器都是用的手工代码而不是flex自动生成的.这些都

【C++基础】 各种“虚”总结(ing...)

一.虚基类——在继承方式(public / private) class B1: virtual public B0{}; 作用:防止多重继承中二义性,保证成员唯一标识是核心. [比较] 作用域分辨符::  vs  虚基类 相同:都是为了保证 唯一标识成员 不同:①“::” 在派生类中,同名成员有多个拷贝,通过积累名来唯一标识.可以容纳更多数据 D1 d1;      d1.B1 :: nV = 2; ②虚基类,只维护一份成员拷贝.更节省内存 [C++基础] 各种"虚"总结(ing..

VB.NET小结——再聊面向对象

学完VB.NET,很大的一个感受就是,以前觉得台湾话挺好玩儿的,但是,现在,只想说:爸比,一点儿都不酷啊~..Just kidding~~~ VB.NET主要分为两部分,一部分是我看的懂的部分,一部分是看不懂的. 看的懂的部分一部分是面向对象的那一部分,对于这一部分,由于有以前VB,C#,c++的基础,理解起来并不难.VB.NET在语法上很像VB,连一些常用控件的方法都没有改变,用起来很容易上手,在面向对象上,VB.NET比较像C#,简单的单继承,因此不用考虑会不会出现出现多继承中二义性问题,而

《C++语言基础》课程主页

一.从C到C++ [本课视频]1.1 由C语言到C++(暨本课介绍) 1.2 C语言的基本成份 1.3 C++的数据类型和运算符 1.4 C++中的输入和输出 1.5 内置函数   1.6 有默认参数的函数 1.7 函数重载 1.8 函数模板 1.9 字符串类 1.10 C++编程环境 >>>下载:程序示例 二.类和对象 [本课视频]   2.1 初见对象 自测 2.2 类的声明和对象的定义 自测 2.3 基于对象的程序的执行过程 自测 2.4 类的成员函数  自测 2.5 对象成员的引

C++ 继承中的二义性

当一个类有多个基类的时候,通过所有直接基类同时进行名字查找.多重继承的派生类有可能从两个或多个基类继承同名成员,对该成员如果不加限定的话,这样使用就是二义性的.即使两个继承的函数有不同的形参表也会产生错误,类似的,即使函数在一个类中是私有的而在另一个类中是公用的或受保护的,也同样是错误的.名字查找总是以两个步骤发生:首先编译器找到一个匹配的声明(若找到两个以致多个声明,就会产生二义性),然后,编译器才确定所找到的声明是否合法. #include<iostream> #include<st

派生类的构造函数和析构函数和多继承中的二义性与虚函数

析构函数主要作用是对数据成员初始化. 1派生类的构造函数 派生类的构造函数定义的一般形式为: 派生类名::派生类名(基类所需形参,本类成员所需形参):基类1(基类1 参数表),基类2(基类2 参数表),···,基类n(基类n 参数表),对象成员1(对象1 参数表),对象成员2(对象2 参数表),···,对象成员m(对象m 参数表){ //本类基本类型数据成员初始化 } 如果使用基类无参构造函数,派生类构造函数形参表中不包含供给基类构造函数的参数.此时,系统会调用基类的默认构造函数.如果使用对象数