C++ 当我为我的简单类数组重载赋值运算符时,我得到了预期的错误答案 //输出是“01234 00000”,但输出应该是或我希望它是什么 //“01234 01234”,因为赋值运算符重载 #包括 使用名称空间std; 类阵列 { 公众: IntArray():大小(10),使用(0){a=newint[10];} IntArray(ints):大小,已使用(0){a=newint[s];} int&运算符[](int索引); 内排和操作员=(内排和右侧的常量); ~IntArray(){delete[]a;} 私人: int*a; 整数大小; 使用int;//表示数组位置 }; int main() { 无格式副本; 如果(2>1) { 内排arr(5); 对于(int k=0;k

C++ 当我为我的简单类数组重载赋值运算符时,我得到了预期的错误答案 //输出是“01234 00000”,但输出应该是或我希望它是什么 //“01234 01234”,因为赋值运算符重载 #包括 使用名称空间std; 类阵列 { 公众: IntArray():大小(10),使用(0){a=newint[10];} IntArray(ints):大小,已使用(0){a=newint[s];} int&运算符[](int索引); 内排和操作员=(内排和右侧的常量); ~IntArray(){delete[]a;} 私人: int*a; 整数大小; 使用int;//表示数组位置 }; int main() { 无格式副本; 如果(2>1) { 内排arr(5); 对于(int k=0;k,c++,class,operator-overloading,scope,C++,Class,Operator Overloading,Scope,我认为问题在于,代码集中没有任何地方使用了而不是0,所以当从0循环到used时,不会复制任何内容 在运算符[]中指定元素时,是否要设置已使用的 另外,如果需要定义析构函数和复制赋值运算符,那么通常(在本例中)也需要提供一个复制构造函数。我认为问题在于,代码中没有任何地方将used设置为0以外的任何对象,因此当从0循环到used时,不会复制任何内容 在运算符[]中指定元素时,是否要设置已使用的 另外,如果有必要定义析构函数和复制赋值运算符,那么通常(在本例中)也需要提供一个复制构造函数。是的,这是

我认为问题在于,代码集
中没有任何地方使用了
而不是0,所以当从0循环到
used
时,不会复制任何内容

运算符[]
中指定元素时,是否要设置
已使用的


另外,如果需要定义析构函数和复制赋值运算符,那么通常(在本例中)也需要提供一个复制构造函数。

我认为问题在于,代码中没有任何地方将
used
设置为0以外的任何对象,因此当从0循环到
used
时,不会复制任何内容

运算符[]
中指定元素时,是否要设置
已使用的


另外,如果有必要定义析构函数和复制赋值运算符,那么通常(在本例中)也需要提供一个复制构造函数。

是的,这是我花了一个小时的问题,谢谢。是的,这是我花了一个小时的问题,谢谢。在
运算符[]
您可能还应该检查
索引
是否为负数..或者将其设置为
无符号
。您应该学会对赋值运算符使用复制/交换习惯用法。您提供的代码是标准的首次尝试,并且不是异常安全的(甚至不提供基本的异常保证)。在
运算符[]
您可能还应该检查
索引
是否为负数..或者将其设置为
无符号
。您应该学会对赋值运算符使用复制/交换习惯用法。您提供的代码是标准的首次尝试,并且不是异常安全的(甚至不提供基本的异常保证)。
//output is "01234 00000" but the output should be or what I want it to be is 
// "01234 01234" because of the assignment overloaded operator
#include <iostream>
using namespace std;
class IntArray
{
public:
  IntArray() : size(10), used(0) { a= new int[10]; }
  IntArray(int s) : size(s), used(0) { a= new int[s]; }
  int& operator[]( int index );
  IntArray& operator  =( const IntArray& rightside );
  ~IntArray() { delete [] a; }
private:
  int *a;
  int size;
  int used;//for array position
};

int main()
{
  IntArray copy;
  if( 2>1)
    {
      IntArray arr(5);
      for( int k=0; k<5; k++)
        arr[k]=k;

      copy = arr;
      for( int j=0; j<5; j++)
        cout<<arr[j];
    }
  cout<<" ";
  for( int j=0; j<5; j++)
    cout<<copy[j];

  return 0;
}

int& IntArray::operator[]( int index )
{
  if( index >= size )
    cout<<"ilegal index in IntArray"<<endl;

  return a[index];
}
IntArray& IntArray::operator =( const IntArray& rightside )
{
  if( size != rightside.size )//also checks if on both side same object
    {
      delete [] a;
      a= new int[rightside.size];
    }
  size=rightside.size;
  used=rightside.used;
  for( int i = 0; i < used; i++ )
    a[i]=rightside.a[i];
  return *this;
}