首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ 重载赋值运算符的有关问题

2013-01-07 
C++ 重载赋值运算符的问题#ifndefARRAY#define ARRAY#include iostream#include iomanip#include cst

C++ 重载赋值运算符的问题

#ifndefARRAY
#define ARRAY
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
class Array{
public:
Array(int);
int &operator [](const int);
Array operator =(const Array &);
void show();
~Array();
private:
int *base;
int size;
};
#endif

#include "Complex.h"
Array::Array(int a)
{
if (a > 0){
size=a;
base=new int [size];
for (int i=0; i<size; i++)
base[i]=0;
}
}
int &Array::operator [](const int i)
{
if (i < 0){
cout<<i<<" out of range. "<<endl;
exit(1);
}
return base[i];
}
Array Array::operator =(const Array &a)//返回Array
{
if (this == &a)
return *this;
delete [] base;
size=a.size;
base=new int [size];
for (int i=0; i<size; i++)
base[i]=a.base[i];
    cout<<base[0]<<endl;
return *this;
}
void Array::show()
{
int i;
for (i=0; i<size; i++){
cout<<setw(7)<<base[i];
if ((i+1)%4 == 0)
cout<<endl;
}
if (i%4 != 0)
cout<<endl;
}
Array::~Array()
{
delete [] base;
}

#include "Complex.h"

int main()
{
Array a1(5);

a1[0]=10;         //重载[]运算符
cout<<"a1[0] = "<<a1[0]<<endl;//打印a[0]的值

Array a2(10);
cout<<"\nThe a2 is:"<<endl;
a2.show();

a2=a1;  //重载 = 运算符
//cout<<a2[0]<<endl;
cout<<"\nAfter assigning the a2 is:"<<endl;
a2.show();

    return 0;
}


在这个程序中我重载的=赋值运算符返回Array 类型,在VS下运行打印a2产生一些垃圾值??  返回void和Array&都没有问题,怎么回事? 
[解决办法]
引用
Array &Array::operator =(const Array &a);


返回一个引用吧。不然new出来的东西,就野了。
[解决办法]
Array::~Array()
{
    delete [] base;
}
临时变量是要析构的。delete [] base。

热点排行