gpt4 book ai didi

c++ - 您可以通过继承访问 'promote' 规范,您可以访问 'demote' 规范吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:31 32 4
gpt4 key购买 nike

“提升”是指限制更多访问权限,“降级”是指减少限制。

例如,当 class B 使用 : protected: privateclass A 派生时,则A 的公共(public)成员分别被提升为 protected 和私有(private)的。

是否可能有一些 class C 进来并从 class B 派生自己,同时将继承的 class A 成员降级回其原始访问规范?

最佳答案

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

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

class B : protected A { };

class C : public B {
public:
using B::F;
};

这也可以用于数据成员:

class A {
public:
int n;
};

class B : protected A { };

class C : public B {
public:
using B::n;
C() : n(this->B::n) { }
};

使用 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;
}

这是有效的,因为通过 virtual 继承,C 可以直接从 A相同实例派生为 B,但具有不同的访问说明符。

关于c++ - 您可以通过继承访问 'promote' 规范,您可以访问 'demote' 规范吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867842/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com