class CAClass
{
public:
CAClass(int i): m_i(i)
{
}
// 需要注意返回值为const
const CAClass operator* (const CAClass &a)
{
return CAClass(a.m_i * m_i);
}
// 需要做连等 a = b = c
CAClass& operator= (const CAClass& a)
{
if (&a == this)
return *this;
m_i = a.m_i;
return *this;
}
bool operator== (const CAClass& a)
{
return m_i == a.m_i;
}
// 常对象进行比较
bool operator== (const CAClass& a) const
{
return m_i == a.m_i;
}
private:
int m_i;
};
在这里重载的operator *返回值为 const 原因是: 避免下面代码的错误
CAClass a(1), b(2);
CAClass c(2);
if (a * b = c)
{
std::cout << "a 和 b相等" << std::endl;
}
其实是想比较大小,但是少些了一个=,在内置类型的时候编译器会报错,所以我们需要遵循内置类型的原则,返回const 就可以避免这类错误的发生
在CAClass类中我们需要注意:
1. operator* 操作符重载返回值是const
2. operator= 操作符重载返回值是引用,非常引用,因为需要满足等号连等的需求
3. operator==操作符重栽函数发生了重载,主要是因为operator*这类的操作返回值是常对象,所以只能调用常成员函数!