gpt4 book ai didi

c++ - 如何使基类的某些构造函数只能由特定的派生类调用?

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

struct Base {
Base (type1, type2, type3);
Base (); // <--- should be invoked only by `Derived_2`
virtual ~Base() = 0; // an abstract class
};

对于上面的Base,我们有多个派生类:Derived_1, Derived_2, ..., Derived_N.

在构造对象时,所有派生类都必须调用Base(type1, type2, type3) 构造函数,除了Derived_2,它应该使用Base()(默认构造函数),同时构造对象。

有没有办法(C++11 可以)有这样的规则?换句话说,如果 Derived_2 以外的任何人尝试使用默认的无参数构造函数,那么编译器应该给出错误。

编辑:对于那些询问设计问题的人,我同意。这是我的看法。

  • 实际上,理想情况下我根本不需要默认构造函数。全部必须使用带参数的构造函数,它需要运行时type1, type2, type3 形式的参数。
  • 现在,我看到继承层次结构中的几个类对象将在 main() 获取之前被全局实例化执行。当然,那些是特殊情况,必须招待他们通过引入默认构造函数
  • 但是,此治疗仅适用于 1 个或最多 2 个类(class)。休息所有类必须保持调用有参数的构造函数的规则。

我希望这能让我的想法变得清晰。

最佳答案

我能想到的唯一方法是将您的 Base 的默认构造函数声明为私有(private)并使 Derived_2 成为您的 Base 类的友元,这样它就可以调用它的默认构造函数。

但是,这种风格很糟糕,因为您的 Base 类现在必须知道它的派生类之一。 Dervived_2 仍然可以使用 3 个参数调用构造函数。

关于c++ - 如何使基类的某些构造函数只能由特定的派生类调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16313835/

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