我可以从默认继承中更改访问者吗?

时间:2015-04-13 20:50:41

标签: c++ inheritance accessor

我理解公共/受保护成员受保护继承保护,并且它们是私有继承的私有。但是我可以明确地将它们更改为公开(如下所示)吗?我实际上并不完全理解" public:A :: x" ....

    class A
{
public:
    int x;
    int y;
protected:
    int z;
};

class B : protected A   
{
public:
    A::x;
};

class C : private B 
{
public:
    B::y;
    B::z;
};

2 个答案:

答案 0 :(得分:1)

该行

A::x;

是一个"访问声明符",所以它确实允许你" make"在派生类的public区域中可见的继承成员。它还用于显示可见hidden overloaded functions。但是现在它已在C ++中弃用,因此请尝试使用

using A::x;

示例:

#include <iostream>

class Foo
{
protected:
    int x{10};
};

class Bar : public Foo
{
public:
    using Foo::x; // makes x "public" here
};

int main()
{
   Bar bar;
   std::cout << bar.x << std::endl;
}

答案 1 :(得分:0)

class B : protected A   
{
public:
    A::x;
};

这不再是有效的语法。现在已弃用此access declarator。要更改继承成员的可访问性,您应使用using关键字

class B : protected A   
{
public:
    using A::x;
};

现在,虽然x被继承为受保护,但您明确将其重命名为public访问权限。所以现在可以这样做了:

B b;
b.x = 0; //Ok
b.y = 0; //Error, cannot access protected member