C ++-对“ using”关键字的说明

Dae*_*eto 1 c++ using class

我需要对using有关类的关键字进行快速说明,因为我不确定我是否正确理解。

假设我有以下示例:

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

};

class C : public B {protected: using B::var; };
Run Code Online (Sandbox Code Playgroud)

这是否意味着,而不是继承的变量varpublic从B类,C类,而不是继承此变量protected,离开将是唯一的公共变量int f(void);

另外,类C是否可以通过private: using B::var;在其主体内部继承而将变量作为私有变量继承?

public: using B::var;既然变量var已经在B类内部公开了,那有什么写法吗?

谢谢!

sse*_*ell 5

这是否意味着,而不是继承的变量varpublic从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类中公开了?

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

有关更多信息,请参见使用声明:在类定义中。

  • @Daeto如果不指定继承类型,则类默认继承为“ private”。在您的示例中,“ B :: var”被定义为“公共”,但是由于继承是“私有”(默认情况下),因此“ C :: var”是私有的。但是由于您的使用,C :: var被设置为受保护的。请参阅[默认类继承访问](http://stackoverflow.com/a/3811480/735425)和[私有,公共和受保护继承之间的区别](http://stackoverflow.com/a/1372858/735425)。 (2认同)