以下是我创建的linear_program
类的构造函数的C ++代码。问题是我有一种感觉,按照设计,我应该为这个类重载>>
运算符,而不是在类的构造函数中使用>>
。但后来我必须动态分配内存,这取决于所采用的输入,所以我不能完全隔离逻辑,即使我重载操作符,那么我将无法立即获取所有输入。这就是为什么在这种情况下我没有看到重载>>
的好处。
linear_program::linear_program() {
cin >> dim >> no_constr;
lp = new plane[no_constr];
double *temp = new double [dim];
double constant;
for (int i = 0; i < no_constr; ++i) {
for (int j = 0; j < dim;++j) {
cin >> temp[j];
}
cin >> constant;
lp[i].set_plane(temp, constant, dim);
}
for (int i = 0; i < no_constr; ++i) {
cin >> cost[i];
}
}
这是否符合设计标准。我还想知道是否还有其他健康的替代方案。
答案 0 :(得分:1)
取决于你的意思'好'。但我建议在构造函数中保持对象初始化,并将业务逻辑(与该对象的创建不对应)移动到另一个函数。
构造函数应该初始化对象,仅此而已。
linear_program::linear_program(int dim, int no_constr):
m_noConstr(no_constr), m_Dim(dim)
{
lp = new plane[no_constr];
double constant;
}
void linear_program::get_something()
{
double *temp = new double [m_Dim];
for (int i = 0; i < m_noConstr; ++i) {
for (int j = 0; j < m_Dim;++j) {
cin >> temp[j];
}
cin >> constant;
lp[i].set_plane(temp, constant, dim);
}
for (int i = 0; i < no_constr; ++i) {
cin >> cost[i];
}
}
//Call get_something() after the object has been initialized. It makes reading the code easier.