在派生类中使用指令将继承更改为公共

Posted

技术标签:

【中文标题】在派生类中使用指令将继承更改为公共【英文标题】:Using directive in Derived Class changes inheritance to Public 【发布时间】:2012-07-17 07:41:59 【问题描述】:

一个非常简单但又令人困惑的问题:

为什么 using 指令会改变继承!? 这与 Comeau 一起编译。

我读过 using 指令(声明?)使变量公开,但为什么呢? 我想要的只是一个不总是在 B 中写 this->x 的好方法...?

class A
protected:
    int x;
public:
;

class B: public A 
public:
    using A::x;
;

int main()
  B b;
  b.x = 2;

谢谢!

【问题讨论】:

你不必在B里面写this->x... 好的,我实际上有模板,我可以避免使用这个->只需添加正确的“部分”(私有,受保护,公共)(不更改继承)部分使用decleration ...就是这样... 【参考方案1】:

你是类设计者,你可以公开变量。

如果您不想这样,请不要将using 放在公共部分。

而且你不必在派生类中使用this->x,除非基类是模板。

【讨论】:

【参考方案2】:

为什么愚蠢的 using 指令会改变继承!?

因为您已经声明了using 声明(不是指令)public。如果您不希望它被普遍访问,请将其设为 protectedprivate

我想要的只是一个很好的方法,不要总是在this->x 里面写B...?

通常,在您的示例中,您不必这样做。如果AB 都是模板,并且基类是依赖的(即依赖于派生类的模板参数),您只需要这样做。在这种情况下,私人using 将允许您避免写this->x

【讨论】:

以上是关于在派生类中使用指令将继承更改为公共的主要内容,如果未能解决你的问题,请参考以下文章

C#如何将新变量的基类中的变量值更改为派生类

我们可以将基类的私有成员继承到派生类的公共成员中吗?

在派生类中使用受保护的说明符

继承中的基类是不是复制到派生类?

如果该属性在派生类中被覆盖,如何调用基类的属性?

如何将 EntityData 派生类默认字符串 Id 属性的主键更改为 int 属性?