在设计中,在构造函数中使用istream运算符是否正常

时间:2013-01-25 19:35:31

标签: c++ operator-overloading

以下是我创建的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];
    }
}

这是否符合设计标准。我还想知道是否还有其他健康的替代方案。

1 个答案:

答案 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.