Для ситуации wrapint = wrapint:
wrapint& wrapint::operator=(const wrapint& rhs)
{
// test for equality of objects by equality of address in memory
// other options should be considered depending on specific requirements
if (this == &rhs) return *this;
m_iCurrentNumber = rhs.m_iCurrentNumber;
return *this;
}
Я должен сказать, что приведенное выше является правильной подписью для оператора присваивания.Я думаю, что предоставленные вами подписи неверны, или, по крайней мере, я никогда не видел такого в своем опыте работы с C ++.
Если вы хотите преобразовать из int в wrapint ив противном случае вы должны предоставить следующее:
1) из int в wrapint - правильный конструктор, который позволит неявное преобразование из int;в качестве стороны примечание вы должны действительно убедиться, что поведение подразумевается и находится в пределах проблемы при работе с такими неявными преобразованиями (посмотрите на явное ключевое слово C ++ для дальнейшего "просветления")
2) от wrapint до int - правильный оператор приведения
Ниже приведен пример:
#include <iostream>
class wrapint
{
public:
wrapint() : m_iCurrentNumber(0)
{
}
// allow implicit conversion from int
// beware of this kind of conversions in most situations
wrapint(int theInt) : m_iCurrentNumber(theInt)
{
}
wrapint(const wrapint& rhs)
{
if (this != &rhs)
this->m_iCurrentNumber = rhs.m_iCurrentNumber;
}
wrapint& operator=(const wrapint& rhs);
operator int ()
{
return m_iCurrentNumber;
}
private:
int m_iCurrentNumber;
};
wrapint& wrapint::operator=(const wrapint& rhs)
{
// test for equality of objects by equality of address in memory
// other options should be considered depending on specific requirements
if (this == &rhs) return *this;
m_iCurrentNumber = rhs.m_iCurrentNumber;
return *this;
}
using namespace std;
int main()
{
// this will be initialized to 0
wrapint theOne;
// this will be 15
wrapint theOtherOne = 15;
cout << "The one: " << theOne << "\n";
cout << "The other one: " << theOtherOne << "\n";
theOne = theOtherOne;
int foobar = theOne;
// all should be 15
cout << "The one: " << theOne << "\n";
cout << "The other one: " << theOtherOne << "\n";
cout << "The foobar: " << foobar << "\n";
return 0;
}