1

我正在operator=为我制作的课程重载。我为两门课做了这个,其中一门工作得很好,而且它们似乎都做得正确。重载的运算符之一不工作。该程序不会产生任何错误,它只是简单地返回类的空白版本。如果有人对可能是什么问题有任何想法,将不胜感激。

.h 文件

Patient operator=(const Patient &right);

.cpp 文件

 //Overloaded functions
Patient Patient::operator=(const Patient &right)
{
    Patient temp;

    temp.patientName = right.patientName;
    temp.age = right.age;
    temp.code = right.code;
    temp.problem = right.problem;
    temp.doctorName = right.doctorName;
    temp.roomNum = right.roomNum;
    temp.isWaiting = right.isWaiting;
    temp.isComplete = right.isComplete;

    return temp;
}

它正在用于的程序的一部分。我知道随机输出消息,我试图找到程序中出现问题的位置。将其缩小到pat=p;声明。

void Room::setPat(Patient p)
{   
    cout << "Test" << endl;
    cout << p.getName() << pat.getName() << "end";

    pat = p;
    cout << p.getName() << pat.getName() << "end";
    cout << "End Test" << endl;
    patUsed = true;
 }  
4

4 回答 4

2

从您提供的代码来看,无需编写赋值运算符。编译器生成一个就可以了。

于 2013-04-11T11:49:51.700 回答
1

您不需要“tmp”。只需删除它。并返回一个参考。

Patient& Patient::operator=(const Patient &right)
{
patientName = right.patientName;
age = right.age;
code = right.code;
problem = right.problem;
doctorName = right.doctorName;
roomNum = right.roomNum;
isWaiting = right.isWaiting;
isComplete = right.isComplete;
return *this;
}

您的原始代码不修改 的左操作数=,这不是预期的结果。

如果您的Patient没有这些其他成员,则此=() 定义是不必要的,您可以省略它。编译器将为您生成它,每个成员的“简单”分配,如 @sellibitze所指出的。仅当您需要其他内容时才定义 onw =(),例如深拷贝。我希望你不要在这里复制任何指针,并且每个成员的类都有一个“正确的” =()自我。

于 2013-04-11T11:32:56.130 回答
0

1)您不需要在赋值运算符中创建任何临时。

2) 赋值运算符应返回对自身的引用。

这里的例子。

     //Overloaded functions
    Patient& Patient::operator=(const Patient &right)
    {
    patientName = right.patientName;
    age = right.age;
    code = right.code;
    problem = right.problem;
    doctorName = right.doctorName;
    roomNum = right.roomNum;
    isWaiting = right.isWaiting;
    isComplete = right.isComplete;
    return *this;
    }
于 2013-04-11T11:34:24.697 回答
0

问题是您没有设置当前对象的任何值,而只是创建一个新对象并返回它。

Patient& Patient::operator=(const Patient &right)
{
    patientName = right.patientName;
    age = right.age;
    code = right.code;
    problem = right.problem;
    doctorName = right.doctorName;
    roomNum = right.roomNum;
    isWaiting = right.isWaiting;
    isComplete = right.isComplete;
    return *this;
}

请注意,局部变量已被删除,而您正在分配类变量和对当前类的引用。

于 2013-04-11T11:34:40.000 回答