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)
构造函数, except Derived_2
,在构造对象时应该使用Base()
(默认构造函数)。
有没有办法(C++ 11 可以)有这样的规则?换句话说,如果除了Derived_2
尝试使用默认的无参数构造函数之外的任何人,编译器应该给出一个错误。
编辑:对于那些询问设计问题的人,我同意这一点。这是我的看法。
- 实际上,理想情况下我根本不想要默认构造函数。所有都必须使用带参数的构造函数,它
以
type1, type2, type3
. - 现在,我看到继承层次结构中的几个类,其对象将在
main()
执行之前全局实例化。当然,这些都是特殊情况,必须通过引入默认构造函数来娱乐它们 - 然而,这种治疗仅适用于 1 类或最多 2 类。其余所有类都必须维护调用参数构造函数的规则。
我希望这能说明这个想法。