Я пытаюсь перегрузить оператор присваивания и хотел бы прояснить некоторые моменты, если все в порядке.
У меня есть функция, не являющаяся членом, 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==
, не являющейся членом? Смогу ли я после этого выполнить назначение объектов друг другу в основном?