c++重载+时号出错,求大神指点


#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");
}

图片说明