代入演算子をオーバーロードしようとしていますが、問題がなければいくつか解決したいと思います。
bool operator==( const MyClass& obj1, const myClass& obj2 )
クラスの外で定義された非メンバー関数があります。
明らかな理由で、プライベート メンバーのいずれにもアクセスできません。
だから私がする必要があると思うのは、代入演算子をオーバーロードすることです。非メンバー関数で割り当てを行います。
そうは言っても、次のことを行う必要があると思います。
- my 関数を使用し、
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;
}
おそらくおわかりのように、私はこの過負荷で完全に迷っています。任意のヒント?同じ演算子を のみでオーバーロードする完成版がある::
ので、プライベート メンバーはスコープを失いません。割り当てを true として返すと、で動作しmain
ます。これは私の本にある例です。
代入演算子をオーバーロードしてから、operator==
非メンバー関数で変換を実行しますか? そのステップを完了した後、メインでオブジェクトを相互に割り当てることができますか?