私は代入演算子をオーバーロードしようとしていますが、大丈夫ならいくつかの問題をクリアしたいと思います。オーバーロード= C++で
私はメンバークラス以外の機能を持っています、bool operator==(const MyClass& obj1, const myClass& obj2)
は私のクラスの中に定義されています。
明白な理由から私のプライベートメンバーのいずれにも参加できません。
だから私がする必要があるのは、代入演算子をオーバーロードすることです。また、非メンバ関数で代入を行います。言ったことで
、私は次の操作を実行する必要があると思う:
- 私の関数を使用して
strcpy
またはstrdup
を使用して情報をコピーします。私はstrcpy
を使用しました。 - 代入演算子、bool MyClass :: operator =(const MyClass & obj1)に移動します。
- 関数オーバーロード(==)に行き、obj2をobj1に割り当てます。
私はコピーコンストラクタを持っていないので、私はこれらにこだわっている:
class Class
{
private:
m_1;
m_2;
public:
..
};
void Class::Func1(char buff[]) const
{
strcpy(buff, m_1);
return;
}
void Class::Func2(char buff[]) const
{
strcpy(buff, m_2);
return;
}
bool Class& Class::operator=(const Class& obj)
{
if (this != &obj) // check for self assignment.
{
strcpy(m_1, obj.m_1);
// do this for all other private members.
}
return *this;
}
bool operator== (const Class& obj1, const Class& obj2)
{
Class MyClass1, MyClass2;
MyClass1 = obj1;
MyClass2 = obj2;
MyClass2 = MyClass1;
// did this change anything?
// Microsofts debugger can not get this far.
return true;
}
だから、あなたはおそらく、私は完全にこのオーバーロードで迷ってしまいました、言うことができるように。任意のヒント?完成したバージョンには同じオペレータがオーバーロードされていますが、::
でしかないので、プライベートメンバーはスコープを失うことはありません。私は割り当てを真として返し、それはmain
で働く。私の本にある例はどれですか。
代入演算子のオーバーロードが発生し、operator==
非メンバ関数の変換が実行されますか?そのステップを完了した後、私はメインでお互いにオブジェクトを割り当てることができますか?
代入演算子は右から左に連想するので、a = b = cは(a =(b = c))と評価されているので、大丈夫です。 const参照を返します。 – Ismael
これは本当ですが、効果的なC++(Scott Meyers)は、C++標準では非const参照を返すべきだと言っています。これは、intsのようなもののために実際には(a = b)= cである組み込み関数の(奇妙な)動作と互換性を持たせるためです。 –