#include<iostream>
#include<cstring>
#include<string>
class Array{
string name;
int count;
int *data;
public:
Array();
Array(string name,const int *data,int count);
~Array();
void print();
void order();
Array operator+(const Array &array); //重载‘+’ ????
friend ostream &operator<<(ostream &out, const Array &array );
};
Array::Array(){name=" "; count=0; data=NULL;}
Array::Array(string name, const int *data,int count){
this->name=name;
this->count=count;
this->data=new int[count];
for(int i=0;i<count;i++){
this->data[i]=data[i]; // *this .
}
}
Array::~Array(){if(data!=NULL) {delete []data;count=0;}}
void Array::print(){
cout<<name<<": ";
for(int i=0;i<count;i++){
cout<<data[i]<<" ";
}
cout<<endl;
}
ostream &operator<<(ostream & AA, const Array &array ){
AA<<array.name<<": ";
for(int i=0;i<array.count;i++){
AA<<array.data[i]<<" ";
}
AA<<endl;
return AA;
}
void Array::order(){
int tmp;
for(int i=0;i<count-1;i++)
for(int j=0;j<count-1-i;j++)
if(data[j]>data[j+1]){
tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
}
}
Array Array::operator+(const Array &array){ //重载‘+’ ????
Array temp;
int max= (count>array.count? count:array.count);
int min= (count<array.count? count:array.count);
temp.name=name +"+"+ array.name ;
temp.count=max;
temp.data=new int[temp.count];
int i=0;
for(;i<min;i++)
temp.data[i]=data[i]+array.data[i];
for(;i<count;i++)
temp.data[i]=data[i];
for(;i<array.count;i++)
temp.data[i]=array.data[i];
return temp;
}
void main(){
int data1[]={9,8,7,6,5,4,3,2,1,0};
Array array1("array1",data1,10);
cout<<array1;
int data2[]={1,3,5,7,8,6,4,2};
Array array2("array2",data2,8);
cout<<array2 ;
array1.order();
cout<<"after order1 :"<<array1;
array2.order();
cout<<"after order2 :"<<array2;
cout<<(array1+array2); //显示出错,屏蔽这句话就正常了
system("pause");
}
代码漏了很多,你贴代码的时候点一下编辑窗口的</>,然后把代码放在2行省略号之间
你坏就坏在析构函数,因为你返回的是temp,局部变量,写了构造函数,内存释放了。就出错了。
去掉构造函数就没事了
然后你肯定要说,这怎么行?!
那么只好用指针了
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
class Array{
string name;
int count;
int *data;
public:
Array();
Array(string name,const int *data,int count);
~Array();
void print();
void order();
Array* operator+(const Array &array); //重载‘+’ ????
friend ostream &operator<<(ostream &out, const Array &array );
};
Array::Array(){name=" "; count=0; data=NULL;}
Array::Array(string name, const int *data,int count){
this->name=name;
this->count=count;
this->data=new int[count];
for(int i=0;i<count;i++){
this->data[i]=data[i]; // *this .
}
}
Array::~Array(){
if(data!=NULL) {
delete []data;data = NULL; count=0;
}
}
void Array::print(){
cout<<name<<": ";
for(int i=0;i<count;i++){
cout<<data[i]<<" ";
}
cout<<endl;
}
ostream &operator<<(ostream & AA, const Array &array ){
AA<<array.name<<": ";
for(int i=0;i<array.count;i++){
AA<<array.data[i]<<" ";
}
AA<<endl;
return AA;
}
void Array::order(){
int tmp;
for(int i=0;i<count-1;i++)
for(int j=0;j<count-1-i;j++)
if(data[j]>data[j+1]){
tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
}
}
Array* Array::operator+(const Array &array){ //重载‘+’ ????
Array * temp = new Array();
int max= (count>array.count? count:array.count);
int min= (count<array.count? count:array.count);
temp->name=name +"+"+ array.name ;
temp->count=max;
temp->data=new int[temp->count];
int i=0;
for(;i<min;i++)
temp->data[i]=data[i]+array.data[i];
for(;i<count;i++)
temp->data[i]=data[i];
for(;i<array.count;i++)
temp->data[i]=array.data[i];
return temp;
}
void main(){
int data1[]={9,8,7,6,5,4,3,2,1,0};
Array array1("array1",data1,10);
cout<<array1;
int data2[]={1,3,5,7,8,6,4,2};
Array array2("array2",data2,8);
cout<<array2 ;
array1.order();
cout<<"after order1 :"<<array1;
array2.order();
cout<<"after order2 :"<<array2;
cout<<*(array1+array2); //显示出错,屏蔽这句话就正常了
system("pause");
}