lwqsbtl 2018-10-31 08:46 采纳率: 42.9%
浏览 734
已采纳

C++等号运算符‘=’重载问题,显示乱码。

c++中定义两个数组类,重载‘=’运算符,令其按位赋值而非直接地址赋值,调用重载操作符后,显示乱码, 刚开始学习c++,求大神帮忙

class ARRAY{ //数组 类
int N;
int *arr;
public:
ARRAY();
ARRAY(int *b,int m);
~ARRAY(){delete []arr;}
void setfirst(int a){ *arr=a;}

void show();
ARRAY operator=(ARRAY b);

};
ARRAY ARRAY::operator=(ARRAY b){ // 重载 =
N=b.N;
arr=new int[N];
for(int i=0;i<N;i++)
arr[i]=b.arr[i];
return *this;
}
ARRAY::ARRAY(){ //构造函数
N=10;
arr=new int[N];
for(int i=0;i<N;i++){
arr[i]=0;
}
}
ARRAY::ARRAY(int *b,int m){ //构造函数
N=m;
arr=new int[N];
for(int i=0;i<N;i++){
arr[i]=b[i];}
}
void ARRAY::show(){ //显示
for(int i=0;i<N;i++){cout<<arr[i]<<' ';}
cout<<endl;
}
void main(){
int d[10]={1,2,3,4,5,6,7,8,9,10};
int N=9;
ARRAY a(d,N);
ARRAY b;
a.show();
b.show();

b=a;            //赋值 ????????
cout<<"*************\n";
a.show();               //显示出错
b.show();
cout<<"*************\n";
a.setfirst(10);
a.show();
b.show();
cout<<"*************\n";
while(1);

}
重载=后显示如下
图片说明

  • 写回答

1条回答

  • threenewbee 2018-10-31 09:13
    关注
    // Q706325.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    #include <iostream>
    using namespace std;
    
    class ARRAY{ //数组 类
    int N;
    int *arr;
    public:
    ARRAY();
    ARRAY(int *b,int m);
    ~ARRAY(){delete []arr;}
    void setfirst(int a){ *arr=a;}
    
    void show(); 
    ARRAY& operator=(ARRAY& b); //改这里
    };
    ARRAY& ARRAY::operator=(ARRAY& b){ // 重载 = 改这里
    N=b.N;
    arr=new int[N];
    for(int i=0;i<N;i++)
    arr[i]=b.arr[i];
    return *this;
    }
    ARRAY::ARRAY(){ //构造函数
    N=10;
    arr=new int[N];
    for(int i=0;i<N;i++){
    arr[i]=0;
    }
    }
    ARRAY::ARRAY(int *b,int m){ //构造函数
    N=m;
    arr=new int[N];
    for(int i=0;i<N;i++){
    arr[i]=b[i];}
    }
    void ARRAY::show(){ //显示
    for(int i=0;i<N;i++){cout<<arr[i]<<' ';}
    cout<<endl;
    }
    void main(){
    int d[10]={1,2,3,4,5,6,7,8,9,10};
    int N=9;
    ARRAY a(d,N);
    ARRAY b;
    a.show();
    b.show();
    b=a;            //赋值 ????????
    cout<<"*************\n";
    a.show();               //显示出错
    b.show();
    cout<<"*************\n";
    a.setfirst(10);
    a.show();
    b.show();
    cout<<"*************\n";
    while(1);
    }
    
    

    图片说明

    如果问题得到解决,请点我回答投票箭头下面的采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析
  • ¥100 我想找人帮我写Python 的股票分析代码,有意请加mathtao