c++包含关系-总是需要初始化列表
C++ contains relationship - always need initializer list?
如果我想要一个对象包含另一个对象(一个"has-a"关系)。所包含的对象必须总是在初始化列表中创建吗?我想避免使用指针。如果我知道我必须使用初始化列表,那就没问题。
#include <iostream>
class A
{
private:
int ii;
public:
A(int anIi): ii(anIi) {};
int GetBilly() {return ii;}
void billy()
{
for (int jj = 0; jj < ii; ++jj)
{
std::cout << "Billy!" << std::endl;
}
}
};
class B {
private:
public:
A mya;
B(int wantIi): mya(A(wantIi)) {
}
void snoodly() {
int ii = mya.GetBilly();
for (int jj = 0; jj < 2*ii; ++jj)
{
std::cout << "Silly!" << std::endl;
}
}
};
int main () {
B myB = B(5);
myB.snoodly();
myB.mya.snerdly();
return 0;
}
不尽然。
包含对象(CO)可以通过默认初始化、类成员声明初始化器或构造函数初始化器列表创建。如果CO没有默认构造函数或不需要默认值,则需要后两者。
如果在构造容器时CO的值是已知且可用的,则可以方便地将CO初始化为该值。
如果没有,则完全可以通过上述一种机制将CO初始化为无害的默认值,然后根据它所支持的内容,通过赋值或方法调用来设置其值。
所以我的回答是:不完全是,尽管它可能相当方便。
如果类没有默认构造函数,则必须使用mem初始化列表初始化相应的对象。或者您可以在类定义中初始化该对象。
相关文章:
- C++类 - 初始化列表 - 递归 - 按值传递
- 在初始化列表之外手动调用基类的构造函数
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- std::map与谓词与初始化列表
- 类内初始化与构造函数初始化列表的顺序
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- C++初始化列表与分配值
- C++初始化列表中的向量集大小或调整大小
- 在构造函数初始化列表中使用 std::variant
- emplace_back初始化列表错误,当初始化列表在独立变量上工作时
- 解释了构造函数成员初始化列表
- 使用初始化列表时如何获取私有数据?
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 如何在成员初始化列表中声明共享指针
- 庞大的初始化列表,如何修复"fatal error C1060: compiler is out of heap space"
- 我可以检查初始化列表中设置的构造函数主体中的变量吗
- 使用整数初始化列表初始化长双精度的向量
- 是否可以在C++中使用初始化列表设置数组的特定成员?