如果我想要一个对象包含另一个(一个“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;
}
答案 0 :(得分:1)
如果类没有默认构造函数,则必须使用mem初始化程序列表初始化相应的对象。 或者您可以在类定义中初始化对象。
答案 1 :(得分:1)
不是。
可以通过默认初始化,类成员声明初始化或构造函数的初始化列表创建包含对象(CO)。如果CO没有默认构造函数或默认值不需要,则需要后两个。
如果在构造容器时CO的值已知且可用,则可以方便地将CO初始化为该值。
如果没有,完全合理地通过上述机制之一将CO初始化为某个无害的默认值,然后根据它支持的内容,通过赋值或方法调用设置其值。
所以我的答案是:不是真的,虽然它可能很方便。