我需要对关于课程的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类中公开了?
谢谢!
答案 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。