您可以通过继承"提升"访问规范,是否可以"降级"访问规范?

Jim*_*mmy 1 c++ inheritance

通过'促进',我的意思是使访问更具限制性,并且通过'降级',我的意思是减少限制.

例如,当class B源自class A使用: protected: private再A的公共成员得到提升,分别为protected和private.

有些class C人可能会进来并从中衍生出来class B,同时将继承的A类成员降级回原来的访问规范吗?

bdo*_*lan 7

如果您正在使用protected派生,那么类C确实可以通过创建适当的包装器来访问受保护的成员:

class A {
public:
  void F();
};

class B : protected A { };

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

这也可以用于数据成员:

class A {
public:
  int n;
};

class B : protected A { };

class C : public B {
public:
  using B::n;
  C() : n(this->B::n) { }
};
Run Code Online (Sandbox Code Playgroud)

对于private继承,这不是直接可能的,因为C它本身不能访问成员A.但是,如果B是从A使用private virtual继承派生的,那么它可以再次成为可能:

class A {
public:
  void F();
};

class B : private virtual A { };

class C : public B, public virtual A { };

int main() {
  C x;
  x.F();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这样做是因为与virtual继承,C可以直接从获得相同的实例A作为B,但具有不同的访问权限说明符.