1、C++不能重载的操作符有下面5个:
?: . :: sizeof .*
2、区分前置和后置++运算
class MyInt
{
public:
MyInt(int m=0) :m_i(m) {}
MyInt& operator++() //返回引用是因为可以支持前置++++这种形式
{
++m_i;
return *this;
}
const MyInt operator++(int) //带有参数的为后置运算符,返回const禁止后置++++形式
{
MyInt tempInt;
tempInt.m_i = m_i;
++m_i;
return tempInt;
}
int m_i = 0;
};
int main() {
MyInt myInt(0);
int ii = (myInt++).m_i;
cout << ii << endl; //输出0
cout << myInt.m_i << endl; //输出1
MyInt myInt2(10);
int jj = (++myInt2).m_i;
cout << jj << endl; //输出11
cout << myInt2.m_i << endl; //输出11
return 0;
}
3、作为set和map的key需要重载<运算符或者重载了()的类,详见set元素和作为map的key条件
4、直接进行bool值判断需重载bool,提供一个本类型到bool类型的隐式转换(operator bool),而不是返回值为bool(bool operator)。
class MyInt
{
public:
MyInt(int m=0) :m_i(m) {}
operator bool()
{
return m_i > 0;
}
int m_i = 0;
};
int main()
{
MyInt mm(1);
if (mm)
{
cout << "true" <<endl;
}
else
{
cout << "false" <<endl;
}
return 0;
}
tips:如果需要为类型提供隐式转换类型,除了通过构造函数方式之外,还可以重载隐式类型转换操作符:
operator T(){return T}
T为需要隐式转换的类型