实施超载操作员的麻烦



我很难使我的 =运算符工作。我有这样的课。

SSLColumn::SSLColumn(int n){
   m_capacity = n;
   m_data = new int[m_capacity];
   m_size = 0;
   m_start = 0;
   m_end = 0;
}

,到目前为止,我的超载运算符就像这样

const SSLColumn& SSLColumn::operator=(const SSLColumn& rhs) {
      m_capacity = rhs.m_capacity;
      m_data = new int[m_capacity];
      m_size = rhs.m_size;
      m_start = rhs.m_start;
      m_end = rhs.m_end;
      for(int i = 0; i < m_size; i++)
         m_data[i] = rhs.m_data[i];
      return *this;
}

但由于某种原因行不通。我是否缺少或不正确地做某事?

成员变量m_size在构造函数中不初始化,因此,循环在超载运算符中不起作用。请参阅此伪代码,假设M_Size = M_容量:

class SSLColumn {
     int m_capacity;
     int m_size; 
    int* m_data ;
public:
    SSLColumn( int n);
    const SSLColumn& operator=(const SSLColumn& rhs);
};
SSLColumn::SSLColumn( int n) {
    m_capacity = m_size = n;   // <--- SEE HERE !  ( m_size need some value later
    m_data = new int[n];
}
const SSLColumn& SSLColumn::operator=(const SSLColumn& rhs) {
    if( m_data == NULL)  m_data = new int[m_capacity];
    for (int i = 0; i < m_size; i++)
        m_data[i] = rhs.m_data[i];
    return *this;
}

最新更新