组合的实现 - 避免初始值设定项列表
Implementation of composition - avoiding initializer list
我喜欢在类A和B之间做一个组合 - 比如说,类B有一个类型为A的成员。因此,通过初始值设定项列表进行初始化是不利的。
使其工作的唯一方法是在构造函数/初始化列表(B 类(中对类型 A 的成员进行一些初步初始化,然后在获得参数后在构造函数中进一步覆盖此成员。
class A{
private:
int a;
int b;
public:
A(int x, int y): a(x), b(y) {}
}
class B{
private:
A objA;
public:
B(){
// some necessary steps to get say variable int w
objA = new A(w, w+1); // late initialization causes compile error, as
// all members need to be init once entering Ctor
}
我想有一个比前面提到的更优雅的解决方案:双重初始化 - 首先在初始化列表中(例如通过 B((:objA(0,0((,稍后根据需要(A(w,w+1((。谢谢!
使用委托构造函数:
class B{
private:
A objA;
public:
B() : B(compute_w()){}
private:
B(int w) : A(w, w+1) {}
};
相关文章:
- 使用简单类型列表实现的指数编译时间.为什么
- 如何理解C++中链表的自由列表实现?
- 单链接列表实现,规则为 3
- 使用邻接列表C++实现 Dijkstra
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- 点产品计算链接列表实现
- 跳过 cpp 中的列表实现
- 使用链接列表实现stack类来验证XML文件
- 带有列表实现的逻辑模拟器c++
- C 链接列表实现
- 使用链接列表实现堆栈,调试断言失败
- C++跳过列表实现-返回的值已损坏,内存泄漏
- 链接数组列表实现
- 自定义列表实现迭代器无法访问最后一个元素 (c++)
- 链接列表C++实现
- 使用列表C++实现选择排序
- 为什么头部不改变 - 链接列表实现
- boost 如何将类型列表实现为类的"options"?
- 不同类的成员列表实现不起作用
- 自定义STL列表实现问题