iam*_*ind 1 c++ inheritance constructor c++11
struct Base {
Base (type1, type2, type3);
Base (); // <--- should be invoked only by `Derived_2`
virtual ~Base() = 0; // an abstract class
};
Run Code Online (Sandbox Code Playgroud)
说上面Base,我们有多个派生类:Derived_1,Derived_2,..., Derived_N.
在构造对象时,所有派生类都必须调用Base(type1, type2, type3)构造函数,除了在构造对象时Derived_2应该使用Base()(默认构造函数).
有没有办法(C++ 11可以)有这样的规则?换句话说,如果除了Derived_2尝试使用默认的无参数构造函数之外的任何人,则编译器应该给出错误.
编辑:对于那些询问设计问题的人,我同意这一点.这是我的看法.
type1, type2, type3.main()执行之前全局实例化.当然这些是特殊情况,必须通过引入默认构造函数来娱乐它们我希望这会让这个想法变得清晰.
我能想到的唯一方法是声明你Base的默认构造函数是私有的并且Derived_2是你的Base类的朋友,所以它可以调用它的默认构造函数.
但是,这种风格很糟糕,因为你的Base类现在必须知道它的一个派生类.并且仍然可以Dervived_2使用3个参数调用构造函数.
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |