我正在尝试重载赋值运算符,如果可以的话,我想清除一些事情。
我有一个非成员函数,bool operator==( const MyClass& obj1, const myClass& obj2 )
定义在我的班级之外。
由于显而易见的原因,我无法接触到我的任何私人成员。
所以我认为我需要做的是重载赋值运算符。并在非成员函数中进行赋值。
话虽如此,我认为我需要执行以下操作:
- 使用我的功能并使用
strcpy
or复制信息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==
非成员函数中进行转换是否有效?完成该步骤后,我能否在 main 中相互分配对象?