基类重载方法的访问声明

时间:2011-01-05 17:32:26

标签: c++ overloading

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

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

    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??
    };
    

3 个答案:

答案 0 :(得分:4)

通过using声明更改继承函数的可访问性无法在给定的重载上有选择地完成,原因很简单,因为using声明只引入了 名称 < / strong>进入声明区域,根据定义,函数重载共享相同的名称。

我在这里看到的唯一选择是使用简单的转发功能:

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

    using base::method2; // method2 is now public
    // method(int) stays inaccessible
};

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

答案 1 :(得分:1)

您本身并不恢复访问权限。您设置访问权限。正如您在上面所做的那样,您可以显式设置任何方法的访问权限,包括之前声明为private的方法。

答案 2 :(得分:1)

如果派生类想要保护受保护的方法,那么就不可能阻止它被公开,因为你可以编写一个小的包装并完成。 private是另一回事。