基类重载方法的访问声明

Ign*_*eza 6 c++ overloading

鉴于我们在基类中重载了方法,并且派生类继承为private/protected.

  1. 我们可以只恢复重载方法的原始访问级别的一个/几个吗?
  2. 在GCC 4.4.0上,我尝试将基本方法置于受保护的访问之下,然后使用私有访问继承它.当我尝试将访问级别恢复为公共时,它的工作原理!这是它的假设吗?或者它是编译器的错误?据我了解,恢复访问级别不应该用于提升或降级成员的访问级别.

代码段:

class base {
  public:
    void method() {}
    void method(int x) {}
  protected:
    void method2() {}
};

class derived : private base {
  public:
    base::method; // Here, i want to restore only the none parameterized method
    base::method2; // method2 is now public??
};
Run Code Online (Sandbox Code Playgroud)

ice*_*ime 5

using不能在给定的重载上有选择地通过声明更改继承函数的可访问性,原因很简单,即using声明仅将名称引入声明区域,并且根据定义,函数重载共享相同的名称。

我在这里看到的唯一替代方法是使用简单的转发功能:

class derived : private base
{
public:
    void method() { base::method(); }

    using base::method2; // method2 is now public
    // method(int) stays inaccessible
};
Run Code Online (Sandbox Code Playgroud)

我不太确定我理解您的第二个问题,但是是的:您可以通过using声明更改派生类中的基成员可访问性。