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 に答える