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/