学海舟舟_林 2017-11-05 06:00 采纳率: 0%
浏览 775
已采纳

C++符号重载问题,为什么p1.output()打印不出来,p2没有赋给p1吗,怎么改。。。

图片说明#include
using namespace std;

class People{
public:
bool operator ==(const People &b){
if(this->id==b.id){
cout<<"两个people对象的id相同"<<endl;
return true;
}

    else{
        cout<<"两个people对象的id不同"<<endl;
        return false;
    }

}
void operator =(const People &b){
*this=b;
}
input();
output(){
cout<<"输出人员信息:"<<endl;
cout<<"编号:"<<number<<endl<<"性别:"<<sex<<endl;
cout<<"出生日期:"<<birthday<<endl<<"身份证号:"<<id<<endl<<endl;
}

private:
double number;
char sex[10];
char birthday[20];
double id;
};
People::input(){
cout<<"录入people信息"< cout cin>>number;

    cout<<"性别:";
    cin>>sex;

    cout<<"出生日期:";
    cin>>birthday;

    cout<<"身份证号:";
    cin>>id;
    cout<<endl;

}

int main(int argc,char *argv[]){
People p1,p2;
p1.input();
p2.input();
p1.operator ==(p2);
p1.operator =(p2);
cout<<"将p2赋给p1:"<<endl;
p1.output();
system("pause");
return 0;
}

  • 写回答

3条回答 默认 最新

  • 造轮使者 2017-11-05 06:54
    关注

    您好
    楼主您的程序中对于复制号=的重载有问题,导致程序在执行p1.operator =(p2);时崩溃
    因此并不是p1.output();打印不出来的问题,而是在那之前程序就被系统kill掉了。
    关于赋值号=的重载,还请您务必对各个私有成员分别采取对应赋值操作,将您的对赋值号的重载部分修改如下:

            void operator =(const People &b) {
                //*this=b;
                this->number = b.number;
                this->id = b.id;
                strcpy(this->sex, b.sex);
                strcpy(this->birthday, b.birthday);
            }
    

    运行情况如下:
    修改后的运行情况
    请您自行增加对于头文件<cstring><string.h>的引用。
    若对您有帮助,请您采纳,谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题