gpt4 book ai didi

c++ - 在 C++98/C++03 中,如何设置我的类,使其不能从中继承?

转载 作者:行者123 更新时间:2023-12-02 16:00:53 25 4
gpt4 key购买 nike

使用 C++98(或 C++03),如何定义一个类 (B),使得不能从派生自 D 的类 (B) 实例化任何对象.

struct B {};
struct D : public B {};
D d; // this should result in a compiler error

在 C++11(或更新版本)中,可以使用 final说明符。

最佳答案

我发现了这些可能的解决方案,每个都有缺点:

“命名构造函数”

定义基类private的所有构造函数并提供named constructors (staticpublic 方法返回该类的对象)。

缺点:

  • 使用该类是 "not-so-clean"/不太直截了当。努力的目的应该是简化该类的使用。结果需要更多的努力来使用这样的类。

“虚拟继承技巧”

我找到了这个建议 here来自 Bjarne Stroustrup here .另请参阅他的书“C++ 的设计与演化”第 11.4.3 节。

限制继承的类(B),继承(必须是public virtual继承) 来自辅助类 (H)。该辅助类只有私有(private)构造函数。它与待限制类B friend 关系。由于只有 B 可以调用 H 的构造函数,因此无法实例化 B 的更多后继者。

与“命名构造函数”解决方案相比,可以调用“普通”构造函数。我认为使用该类更直接。

缺点:

  • 通常这会增加 B 对象在内存中的大小,因为 virtual 继承。参见 here .
  • 编程这样的类需要更多的努力。

关于c++ - 在 C++98/C++03 中,如何设置我的类,使其不能从中继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70743892/

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