首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基类中的typedef是否在继承的类中可见而没有完全限定?

在C++中,基类中的typedef在继承的类中是可见的,但是如果需要使用这个typedef,需要使用完全限定的名称。这是因为typedef是在当前命名空间中定义的,而不是在类中定义的。因此,在继承的类中,需要使用基类的命名空间来访问这个typedef。

例如,假设我们有以下基类和继承的类:

代码语言:txt
复制
class Base {
public:
    typedef int MyType;
};

class Derived : public Base {
public:
    void func() {
        MyType x; // 错误,因为MyType在Derived类中不可见
        Base::MyType y; // 正确,使用完全限定的名称来访问MyType
    }
};

在上面的例子中,MyTypeDerived类中不可见,因为它是在Base类中定义的。为了访问MyType,需要使用Base::MyType来进行完全限定。

需要注意的是,这个问题和云计算没有直接的关系,因此不需要涉及到云计算相关的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

派生虚函数和非虚函数继承效果

“强制实现”,也就是只要是父指针调用普通函数,那就是父普通函数 虚函数作用,主要是为了让父指针可以调用子类函数,这种是在运行时才决定调用哪个函数 1、虚函数:   C++虚函数主要作用是...子类可以重写父虚函数实现子类特殊化。 2、纯虚函数:   C++包含纯虚函数,被称为是“抽象”。抽象不能使用new出对象,只有实现了这个纯虚函数子类才能new出对象。   ...C++纯虚函数更像是“只提供申明,没有实现”,是对子类约束,是“接口继承”。   C++纯虚函数也是一种“运行时多态”。...3、普通函数:   普通函数是静态编译没有运行时多态,只会根据指针或引用“字面值”对象,调用自己普通函数。   普通函数是父为子类提供“强制实现”。   ...因此,继承关系,子类不应该重写父普通函数,因为函数调用至于对象字面值有关。 参考链接

7910
  • 浅谈数字IC验证面向对象编程(抽象继承

    随着代码重用性和验证IP硬件验证变得越来越普遍,也越来越适用OOP概念。 ? 如何设计大型程序呢?OOP建议使用“divide and conquer(分而治之)”。...这种抽象能力使我们能够组织数据并实现高效沟通。例如你可以说“我昨天开车去上班”,听众会理解而无需说明你开是特斯拉还启动了辅助驾驶。这些细节对于表达意图是没有必要。...面向对象编程使我们可以软件设计上做同样事情。可以定义一个通用,并使用继承创建该抽象特定实例。...例如有一个汽车定义了所有汽车对象可以包含东西,然后该类基础上定义具有某种特殊属性(品牌、颜色和引擎等)特殊汽车,例如银色保时捷跑车。 使用继承可以允许具有足够相似接口对象共享代码。...模块实例是Verilog进行elaboration时创建并且存在于整个仿真过程,对象可以根据要求在运行时创建。功能验证,测试平台构建过程是动态,这使其更加灵活。 endclass: car

    98410

    java之父构造器是否能被子类继承

    子类默认继承属性和方法,但不会继承构造器,而是子类被实例化时会默认调用父空构造器。子类创建时候会调用自己空构造器,并在空构造器会隐式调用super(),即父空构造器。...如果父构造器被重载,那么子类构造器也必须初始化父构造器,否则会报编译错误。当然,只要父显示定义了空构造器,子类中就不必初始化父构造器。...= name; } } 子类:Student.java package myjava; public class Student extends Person{ //这里必须初始化父重载后构造方法...System.out.println(personName); System.out.println(studentName); } 输出: tom jack 说明:此时父没有显示定义空构造器...,只有一个重载了构造器,子类构造器,必须初始化父构造器,即super关键字+父构造器参数。

    1.2K20

    前端测试题:继承,关于super说法错误是?

    考核内容: 继承 题发散度: ★★ 试题难度: ★ 解题思路: Class 可以通过extends关键字实现继承,这比 ES5 通过修改原型链实现继承,要清晰和方便很多。...但是由于没有部署任何代码,所以这两个完全一样,等于复制了一个Point class ColorPoint extends Point { constructor(x, y, color) { super...super.toString(); // 调用父toString() } } 上面代码,constructor方法和toString方法之中,都出现了super关键字,它在这里表示父构造函数...在这两种情况下,它用法完全不同。 super作为函数调用时,代表父构造函数。ES6 要求,子类构造函数必须执行一次super函数。...如果没有 supper() 则会报错 答案: B、 super相当于子类引用

    3K30

    【Java学习笔记之二十一】抽象Java继承用法小结

    一、抽象基本概念 普通是一个完善功能,可以直接产生实例化对象,并且普通可以包含有构造方法、普通方法、static方法、常量和变量等内容。...当一个实例化之后,就意味着这个对象可以调用属性或者放过了,但在抽象里存在抽象方法,抽象方法没有方法体,没有方法体就无法进行调用。既然无法进行方法调用的话,又怎么去产生实例化对象呢。...现在就可以清楚发现: (1)抽象继承子类里面有明确方法覆写要求,普通可以有选择性来决定是否需要覆写; (2)抽象实际上就比普通多了一些抽象方法而已,其他组成部分和普通完全一样...任何时候,如果要执行static方法时候,都可以没有对象情况下直接调用,对于抽象也一样。...(5)有时候由于抽象只需要一个特定系统子类操作,所以可以忽略掉外部子类。这样设计系统库中会比较常见,目的是对用户隐藏不需要知道子类。

    71890

    那些陌生C++关键字

    C++使用typename情况有两种: 第一种情况是函数模板和模板声明。一般模板声明,使用class关键字指定类型参数,后来C++支持使用typename代替class关键字。...这里仅仅是语义上强调模板使用类型参数不一定是类型,可以是所有类型。这里typename和class没有任何区别。...第二种情况使用情况比较特殊,简单说起来就是使用内成员类型时候。内成员类型就是定义内声明了一个类型,该类型属于类型内部,可见性由权限访问符限定。 下面就是一个成员类型声明。...::MyType * pvar;//定义指针 typedef MyClass::MyType MyType;//重新命名类型 这些使用方式并没有太大问题,问题可能出现在带有模板代码,例如: template...而且它能提供转换后结果和状态,一旦转换失败则返回空指针。如果没有继承关系转换一般使用static_cast。

    94970

    (暑假提升-继承专题)

    总结: private成员派生无论以什么方式继承都是不可见。这里可见是指私有成员还是被继承到了派生对象,但是语法上限制派生对象不管里面还是外面 都不能去访问它。...private成员派生是不能被访问,如果成员不想在外直接被访问,但需要在派生能访问,就定义为protected。 可以看出保护成员限定符是因继承才出现。...实际上面的表格我们进行一下总结会发现,私有成员子类都是不可见。...其他 成员子类访问方式 == Min(成员访问限定符,继承方式),public > protected > private。...形象说明,赋值时候是派生是将整个对象就行部分切割之后再赋值给,保证正确性,没有多余部分。 ==对象不能赋值给派生

    7410

    【C++】———— 继承

    所以我们这里可以得到以下几个理论: 积累private成员派生无论以什么方式继承都是不可见,这里可见是指私有成员还是被派生对象,但是语法上限制派生对象不管里面还是外面都无法去访问他们...private成员派生是不能被访问,如果成员不想再外直接被访问,但需要在派生中被访问,就用protected定义。可以看出保护成员限定符可能是由于继承才出现。...实际我们对上面的表格总结一下可以发现,私有成员子类中都是不可访问其他成员访问方式==min(成员访问限定符,继承方式)。...答案当然是隐藏关系,因为函数重载针对是同一个作用域函数,与派生直接作用域不同。 隐藏关系,同名函数默认调用的当前作用域函数,如果想调用其他作用域函数,则需要使用域作用限定符。...这种通过生成派生复用通常被称为**白箱复用(white - box reuse)。**术语“白箱”是相对可视性而言:继承方式内部细节对子类可见

    7410

    C++虚函数详解

    与对象成员不同,虚函数指针对外部是完全可见,除非通过直接访问地址做法或者DEBUG模式,否则它是不可见也不能被外界调用。...首先是最常见继承,子类Derived对虚函数进行覆盖继承,在这个例子仅设计了一个函数继承情况以此推广情况。...那么此时情况是这样: 首先函数表项仍然保留,得到正确继承虚函数其指针将会被覆盖,子类自己虚函数将跟在表后。...Base虚函数base定义为const类型,我们知道const后缀目的是为了限定该函数不对内成员做出修改。...正确原因是: 虚函数声明与定义要求非常严格,只有子函数虚函数与父函数一模一样时候(包括限定符)才会被认为是真正虚函数,不然的话就只能是重载。

    52310

    【笔记】《C++Primer》—— 第三部分:设计者工具

    ,派生一般构造函数开始地方调用构造函数,让来初始化自己成员 静态类型是变量本身代码类型,在编译时决定,动态类型是变量在内存对象类型,在运行时才能决定。...final,表示不允许继续覆盖 有时候希望某个只用来被继承不允许实例化,这时候我们可以给这个加入纯虚函数,拥有纯虚函数叫抽象,不能被直接创建。...此成员访问说明符,这是最重要一部分 派生派生列表访问说明符,这一项决定是派生继承成员对外表现出最高权限 有时候我们需要改变外部对派生继承某个名字访问级别,可以自己访问控制符处用...using声明需要改变名称(用::作用域符特指名称) 派生转换也与派生列表访问说明符有关,本质上与类型转换函数权限有关 名称查找是根据编译时目标的静态类型从内到外进行查找,目标的静态类型决定了其是否可见...因此除了重载虚函数外最好不要让名称同名 派生可以覆盖重载函数,但是如果派生希望重载几个函数都在派生可见的话:一种方法是不覆盖任何一个重载函数或将所有重载函数都进行一次覆盖;另一种方法是为需要重载函数名使用

    1.7K10

    【C++深度探索】继承机制详解(一)

    需要注意是,访问限定符只内部起作用,外部没有直接影响。同时,访问限定符可以用于成员变量和成员函数声明,默认情况下,成员变量和成员函数访问限定符是private。...成员 protected成员 派生protected成员 派生protected成员 派生private成员 private成员 派生可见 派生可见 派生可见...private成员派生无论以什么方式继承都是不可见。...这里可见是指私有成员还是被继承到了派生对象,但是语法上限制派生对象不管里面还是外面都不能去访问它。..._tele }; 结果如下: 上述父Person成员有三种访问限定分别是public、protected、private,子类Student使用public继承,那么对于父公有成员子类访问方式还是

    7510

    C++基础-继承

    当作用于构造函数时,using 声明语句将令编译器生成代码。对于每个构造函数,编译器都在派生中生成一个形参列表完全相当构造函数。...这种方式是必需,否则编译器会试图调用默认构造函数,并无默认构造函数,编译会出错; 派生构造函数,使用 ::Base() 形式显示调用构造函数。...例如,公有成员遇到私有继承时,就变成派生私有成员;保护成员遇到公有继承时,就变成派生保护成员;私有成员派生可见。...注意一点,私有成员派生可见,但派生对象里实际包含有私有成员信息,只是它没有权限访问而已。参 3.1 节。...公有成员派生也是公有成员,保护成员派生也是保护成员,私有成员派生可见。 公有继承用于"是一种"(is-a)关系。

    97520

    【C++】继承(上)

    派生可见 派生可见 总结: private成员派生无论以什么方式继承都是不可见,这里可见是指私有成员还是被继承到了派生对象,但是语法上限制派生对象不管里面还是外面都不能去访问它...private成员派生是不能被访问,如果成员不想在外直接被访问,但需要在派生能访问,就定义为protected,可以看出保护成员限定符是因继承才出现,我们之前学习过程说protected...和private是等价,但在学习继承后,我们就知道它们区别了 在看完表格后我们发现一个规律,对于可见性来说public>protected>private,除了private成员派生可见以外...,其他所有的继承,都是取继承方式与访问限定可见性较小那一个作为派生访问限定符 使用关键字class时默认继承方式是private,使用struct时默认继承方式是public,不过最好显示写出继承方式...继承体系和派生都有独立作用域 子类和父中有同名成员,子类成员将屏蔽父对同名成员直接访问,这种情况叫隐藏,也叫重定义,子类成员函数,可以使用 ::成员 显示访问 需要注意是如果是成员函数隐藏

    5410

    【C++】继承(定义、菱形继承、虚拟继承

    继承关系和访问限定继承成员访问方式变化 记忆方法:私有成员,无论哪种方式继承派生中都是不可见其他成员子类访问方式,取成员访问限定符和继承方式中小一个。...继承,一般用公有和保护,少用私有。 总结: private成员派生无论以什么方式继承都是不可见。...这里可见是指私 有成员还是被继承到了派生对象,但是语法上限制派生对象不管里面还是外面 都不能去访问它。...private成员派生是不能被访问,如果成员不想在外直接被访问,但需要在 派生能访问,就定义为protected。可以看出保护成员限定符是因继承才出现。...优先使用对象组合,不是继承继承允许你根据实现来定义派生实现。这种通过生成派生复用通常被称为白箱复用。术语“白箱”是相对可视性而言:继承方式 内部细节对子类可见

    12810

    C++【继承

    为了复用代码、提高开发效率,可以从各种角色中选出共同点,组成 ,比如每个 人 都有姓名、年龄、性别、联系方式等基本信息, 教职工 与 学生 区别就在于 管理与被管理,因此可以 基础上加一些特殊信息如教职工号...设计相应函数,获取私有成员值进行间接访问即可 其实 C++ 搞这么多种情况(9种)完全没必要,实际使用,最常见到组合为 public : public 和 protected : public...利用域作用限定符 :: 进行访问范围限制 注意: 只要是命名相同,都构成 隐藏 ,与 返回值、参数 无关 隐藏会干扰调用者意图,因此继承,要尽量避免同名函数出现 ---- 4、与派生对象赋值转换...而且还没有解决数据冗余问题 真正解决方法:虚继承 注:虚继承是专门用来解决 菱形继承 问题,与多态虚函数没有直接关系 虚继承菱形继承腰部继承时,加上 virtual 关键字修饰被继承...不会,指针大小固定为 4/8 字节 指针所指向空间(虚表)是否浪费空间?

    14910

    C++之继承

    (派生对应,子类对应父使用时尽量对应使用) 之前我们了解代码复用,比如模板,模板函数等都属于函数复用,继承属于设计层次复用。...3.继承方式变化 总结: private成员派生无论以何种方式继承都是不可见。...(这里可见是指private成员还是被派生继承,但是由于语法限制导致派生对象无论是内还是外都无法进行访问) protected保护成员限定符是因为继承才出现。...protected成员不能在外直接访问,但在派生可以被访问。 成员子类访问方式==Min(成员访问限定符,继承方式)。...当派生定义与父类同名成员时,派生将屏蔽对该成员直接访问,称这种情况为隐藏。派生同名成员是对成员重写/重定义。

    40910

    嵌入式软件工程师笔试面试指南-CC++

    (2)友元A成员函数访问B私有或保护成员。 构造函数/析构函数是否能被派生继承构造函数析构函数不能被派生继承。...派生构造函数要对自身成员初始化,也要对继承过来成员进行初始化当没有默认构造函数时候,通过派生构造函数初始化列表调用构造函数实现。...公有继承 对于子类对象而言,采用公有继承时,成员对子类对象可见性与一般成员对对象可见性相同,公有成员可见,其他成员不可见。...对于子类而言,公有成员和保护成员可见公有成员和保护成员作为派生成员时,它们都维持原有的可见性( public成员子类还是public, protected成员子类还是...(如果在派生没有对虚函数重新定义,则它继承虚函数。)

    1.6K11
    领券