1

特定のケースで代入演算子を理解するのに苦労しています。オブジェクトの配列が 2 つあり、一方が他方にあります。ファイルから情報を読み込んでいます。その一部は最上位オブジェクトに格納され、一部はその配列に格納されています。「=」を使用してこれらを並べ替えると、内部配列の情報は、置換されるのではなく、以前にあったものと連結されているようです。

class TopLevel
{
public:
  TopLevel();
  TopLevel(const TopLevel &);
  ~TopLevel();
  const TopLevel& operator=(const TopLevel &);
private:
  InnerLevel *inlevel[8];
  int numObjectsInArray;

class InnerLevel
{
public:
  InnerLevel();
  InnerLevel(const InnerLevel &);
  ~InnerLevel();
  const InnerLevel& operator=(const InnerLevel &);
private:
  string var1;
  string var2;

ここに代入演算子があります

const TopLevel& TopLevel::operator=(const TopLevel &right )
{
  if ( &right != this ) 
  {
    numObjectsInArray = right.numObjectsInArray;
    for ( int i = 0; i < right.numObjectsInArray; i++ )
      *inlevel[i] = *right.inlevel[i]; 
  }
  return *this;
}

InnerLevel の代入演算子は非常に単純です

const InnerLevel& InnerLevel::operator=( const InnerLevel &right )
{
  if ( &right != this )
  {
    var1 = right.var1;
    var2 = right.var2;
  } 
  return *this;
}

ファイルから読み取って、並べ替えを行っています...

for (i = 0; i < count; i++)
  if (conditions for numeric sort)
    break;

for(int j = count - 1; j >= i; --j)
    tplevel[j + 1] = tplevel[j];

ファイルの読み取りの最後に、混乱全体を印刷しています。tplevel に 2 つのオブジェクトがあり、それぞれ InnerLevel に 2 つのオブジェクトがあるとします。tplevel[2] は次のとおりです。

2  aaaaa  aaaaa
2  bbbbb  bbbbb

そして tplevel[1] は

1  ccccc  ccccc
1  ddddd  ddddd

並べ替え後の tplevel[2] の結果は次のとおりです。

2  aaaaa  aaaaa  
2  bbbbb  bbbbb
2  ccccc  ccccc  
2  ddddd  ddddd

インデックス1を追加するのではなく、2にコピーしたいだけです...何が起こっているのですか?

4

0 に答える 0