我有一个程序,我想用指针初始化一个类对象数组。
class xyz{};
cin>>M;
xyz *a=new xyz[M]; //this will call the constructor for each object.
问题是我在xyz类中有两个构造函数。我想使用其他构造函数初始化最后两个元素,而不是没有参数的默认元素。 我怎么能这样做?
我希望M + 1和M + 2&th;这个术语由接受参数的不同构造函数初始化。
答案 0 :(得分:4)
std::vector<xyz> a(M-2);
a.push_back(xyz(...)); // xyz(...) here is a call to the
a.push_back(xyz(...)); // constructor you want to use
此代码假设M> = 2.这当然不是一个安全的假设,您必须决定如何处理不合格的案例。
答案 1 :(得分:2)
首先,cin<<M
是错误的。它应该是cin >> M
。确保插入和提取操作符指向正确的方向。
你不能单独间接。 new
运算符将为数组中的每个对象调用默认构造函数。
如何实现目标的选项包括:将所需的默认值复制到所需的分配上,或创建指向对象的指针数组。
复制方法
xyz t(my_other_constructor);
xyz* a = new xyz[M];
a[M - 1] = t; // overwrite the default constructed value with the desired
双重间接
xyz** a = new xyz*[M];
for (int i = 0; i < M - 1; ++i)
{
a[i] = new xyz;
}
a[M - 1] = new xyz(my_other_constructor);
理想情况下,您可以使用std::vector
而不是创建手动数组。