0

以下是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];
    }
}

这是设计标准可以接受的吗?我还想知道这种情况下是否还有其他健康的选择。

4

1 回答 1

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. 
于 2013-01-25T19:38:27.697 回答