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

    图片说明

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

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

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?