首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >私有继承中不允许使用基对象

私有继承中不允许使用基对象
EN

Stack Overflow用户
提问于 2017-11-28 17:30:43
回答 2查看 1.4K关注 0票数 18

我正在使用私有继承,我惊讶地发现在派生类中不允许使用任何基对象。

代码语言:javascript
复制
class A;
class B : private A;
class C : public B;

C::method_1()
{
    A* a; // Temporary "A" object for local computation
}

这与继承无关。我不想访问任何this->base method

此配置在Visual Studio中提供了一个私有错误(“'A‘不可访问,因为'B’使用‘C2247’继承自'A‘")。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-28 17:35:31

更改此设置:

代码语言:javascript
复制
A* a;

要这样做:

代码语言:javascript
复制
::A* a;

由于C继承自BB继承自A,因此您需要使用作用域解析操作符来完成此任务。

由于::::A开始关注全局作用域,而不是从包含类parents的局部作用域开始。

Standard

11.1.5访问说明符

在派生类中,查找基类名称将在声明它的作用域中找到注入的类名,而不是基类的名称。injected- class -name可能比声明它的作用域中的基类名称更难访问。

票数 23
EN

Stack Overflow用户

发布于 2017-11-28 17:55:39

ISO C++:11.1访问说明符

5注意:在派生类中,基类名称的查找将注入fi- class - name,而不是声明它的作用域中基类的名称。注入的类名可能比声明它的作用域中的基类的名称更难访问。-end笔记

下面是标准中的示例:

代码语言:javascript
复制
class A { };
class B : private A { };
class C : public B {
    A* p; // error: injected-class-name A is inaccessible
   ::A* q; // OK 
};

N3797 Working Draft, Standard for Programming Language C++

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47528075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档