假设我们在基类中重载了方法,并且派生了作为私有(private)/ protected 继承类的派生类。

  • 我们可以只还原一个/几个重载方法的原始访问级别吗?
  • 在GCC 4.4.0上,我尝试将基本方法置于 protected 访问权限下,然后使用私有(private)访问权限继承它。当我尝试将访问级别恢复为公开时,它起作用了!这是应该如何工作的吗?还是编译器上的错误?据我了解,恢复访问级别不应被用来提升或降级成员的访问级别。

  • 程式码片段:
    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??
    };
    

    最佳答案

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

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

    class derived : private base
    {
    public:
        void method() { base::method(); }
    
        using base::method2; // method2 is now public
        // method(int) stays inaccessible
    };
    

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

    关于c++ - 基类重载方法的访问声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4607197/

    10-11 21:59
    查看更多