C ++ - "使用"关键字澄清

时间:2017-03-03 17:55:15

标签: c++ class using

我需要对关于课程的using关键字做一些快速说明,因为我不确定我是否理解正确。

我们说我有以下例子:

class B {
public:
    int var;
    int f(void);

};

class C : public B {protected: using B::var; };

这是否意味着不是将变量var作为public继承自B类,而是将C继承此变量为protected,而剩下的唯一公共变量将是{{ 1}}?

此外,C类是否可以通过在其正文中包含int f(void);来将变量作为私有继承?

编写private: using B::var;是否有任何意义,因为变量var已经在B类中公开了?

谢谢!

1 个答案:

答案 0 :(得分:5)

  

这是否意味着不是将变量var作为public继承自B类,而是将C继承此变量为protected,而剩下的唯一公共变量将是{{ 1}}?

是的,int f(void);现在是受保护的成员。

您可以尝试编译以下内容来测试:

C::var
  

此外,C类是否可以通过私有方式将变量继承为私有:在其主体内部使用class B { public: B() : var(0) { } int var; protected: private: }; class C : public B { public: C() : B() { } protected: using B::var; private: }; void main() { B b; b.var = 3; // <-- OK C c; c.var = 3; // <-- error C2248 }

再次,是的,您可以将其作为B::var;继承。虽然可以通过private访问该成员来规避它。

B
  

是否有任何写作class B { public: B() : var(0) { } int var; protected: private: }; class C : public B { public: C() : B() { } protected: private: using B::var; }; class D : public C { public: D() : C() { B::var = 3; // <-- OK C::var = 3; // <-- error C2248 }; protected: private: }; ;因为变量var已经在B类中公开了吗?

不,没有意义。这是多余的。

有关详细信息,请参阅Using-declaration: In class definition