赋值运算符连接而不是复制

时间:2013-05-11 05:55:23

标签: c++ arrays class

在特定情况下,我很难找出我的赋值运算符。我有两个对象数组,一个在另一个。我正在从一个文件中读取信息,其中一些存储在顶级对象中,一些存储在其数组中。当我使用'='对它们进行排序时,内部数组中的信息似乎与之前的信息串联而不是替换它。

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中有两个对象,每个对象在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,而不是添加到它...任何想法是什么?

0 个答案:

没有答案