在派生类中使用指令将继承更改为公共
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
。如果您不希望它被普遍访问,请将其设为 protected
或 private
。
我想要的只是一个很好的方法,不要总是在
this->x
里面写B
...?
通常,在您的示例中,您不必这样做。如果A
和B
都是模板,并且基类是依赖的(即依赖于派生类的模板参数),您只需要这样做。在这种情况下,私人using
将允许您避免写this->x
。
【讨论】:
以上是关于在派生类中使用指令将继承更改为公共的主要内容,如果未能解决你的问题,请参考以下文章