通过'促进',我的意思是使访问更具限制性,并且通过'降级',我的意思是减少限制.
例如,当class B源自class A使用: protected或: private再A的公共成员得到提升,分别为protected和private.
有些class C人可能会进来并从中衍生出来class B,同时将继承的A类成员降级回原来的访问规范吗?
如果您正在使用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,但具有不同的访问权限说明符.