1

operator=作成したクラスの をオーバーロードしています。私はこれを 2 つのクラスで行いましたが、そのうちの 1 つは問題なく動作しており、どちらも正しく行われているようです。オーバーロードされた演算子の 1 つが機能していません。プログラムはエラーを生成していません。クラスの空のバージョンを返すだけです。何が問題なのかについて誰かが何か考えを持っているなら、それは大歓迎です。

.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 に答える
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 に答える