我需要对using有关类的关键字进行快速说明,因为我不确定我是否正确理解。
假设我有以下示例:
class B {
public:
int var;
int f(void);
};
class C : public B {protected: using B::var; };
Run Code Online (Sandbox Code Playgroud)
这是否意味着,而不是继承的变量var如public从B类,C类,而不是继承此变量protected,离开将是唯一的公共变量int f(void);?
另外,类C是否可以通过private: using B::var;在其主体内部继承而将变量作为私有变量继承?
public: using B::var;既然变量var已经在B类内部公开了,那有什么写法吗?
谢谢!
这是否意味着,而不是继承的变量
var如public从B类,C类,而不是继承此变量protected,离开将是唯一的公共变量int f(void);?
是的,C::var现在是受保护的成员。
您可以通过尝试编译以下内容进行测试:
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
}
Run Code Online (Sandbox Code Playgroud)
另外,类C是否可以通过
B::var;在其主体内部使用private来将变量继承为private ?
同样,是的,您可以将其继承为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:
};
Run Code Online (Sandbox Code Playgroud)
并且有什么写作要点
public: using B::var; 因为变量var已经在B类中公开了?
不,没有意义。这是多余的。
有关更多信息,请参见使用声明:在类定义中。