gpt4 book ai didi

c++ - 使用 protected C++ 防止派生类的继承

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:55 24 4
gpt4 key购买 nike

class A
{
//friend class B;
protected:
A(){cout << "A\n";};

};
class B: virtual A
{};

class C : B
{};

int main() {
C c;
return 0;
}

我能够成功编译此代码,但由于 A:A() 受到保护,我预计会出现错误。基于这样一个事实,对于虚拟基类,它的最派生类直接调用它的基类。上面的代码给出了对基类中 ctor() 的私有(private)访问的编译错误[预期]。有人可以澄清一下吗,谢谢!

最佳答案

具有protected 访问说明符意味着派生类可以访问该实体。 C 也派生自 A,它不必直接派生自 A 即可获得 protected 访问权限。

另一方面,private 访问将阻止任何派生类具有可访问性,包括 B C.

没有办法以只允许直接派生类访问构造函数的方式来控制访问(具体来说,一组开放的直接派生类)。您最多可以使用 private 访问权限和 friendship 一组封闭的派生类。


解决您对问题的评论:

I want to forbid inheritance from B

只需将 B 标记为 final

class B final : A
{};

关于c++ - 使用 protected C++ 防止派生类的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46753083/

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