不能重载的运算符
:: 作用域解析符
. 成员选择符
.* 成员指针间接引用符
?: 条件运算符
重载运算符有两种形式:以成员函数重载;以友元函数重载
例如++,--运算符有前缀和后缀的区别,为了区分,形参表中加入int表示后缀,否则为前缀
以成员函数重载一元运算符时,operator ++(int)
以全局友元函数重载时,operator ++(参数1,int)
赋值运算符的重载
赋值运算符=只能用类的非静态成员函数重载
原因如下:
为什么不能用静态成员函数重载?
因为静态成员函数只能访问类的静态数据成员
为什么不能用全局友元函数重载?
我们一般重载赋值运算符时,返回this指针,而友元函数没有this指针;
重载赋值运算符函数参数返回值应该返回一个改变了左值的引用,为了能用于链式表达式
重载下标运算符[ ]
必须用成员函数重载
类型转换运算符
1.operator type运算符
operator type只能用成员函数重载,并且不带参数
不用定义返回值,返回值的类型就是type
class A{
double m;
operator int(){
return static_cast<int>(m);
}
static_cast < type-id > ( expression )把expression转换成 type-id 类型
2.类型转换构造函数
class A{
A(){}
};
class B{
B(const A&){}//可以从A转换到B
};
int main()
{
A a;
f(a);//转换成功