运算符重载
operatorX () //X为重载的运算符
operator++() //前自增
operator++(int) //后自增
运算符重载限制
1.必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符
2.不能违反运算符原来的句法规则,即不能改变操作数数量,不能改变优先级
3.不能创建新运算符
4.不能重载下面的运算符
sizeof 运算符
. 取成员运算符
.* 成员指针运算符
:: 作用域解析运算符
?: 条件运算符
typeid RTTI运算符
const_cast 强制类型转换运算符
dynamic_cast 强制类型转换运算符
reinterpret_cast 强制类型转换运算符
static_cast 强制类型转换运算符
5.下面的运算符只能通过成员函数进行重载
= 赋值运算符
() 函数调用运算符
[] 下标运算符
-> 通过指针访问类成员的运算符
附.成员与非成员函数都可进行重载的运算符见图片
函数重载解析
多个函数完全匹配时
1.指向非const 数据的指针和引用 优先于 const 指针和引用参数匹配 (只适用于指针和引用,否则会出现二义性错误)
2.非模板函数 优先于 模板函数
3.若都为模板函数,较具体的模板函数优先,即显式具体化将优于隐式具体化,转换次数少的优于次数多的
调用时加<type> 将告诉编译器应选模板函数
例.
Swap<int>(a,b);
operatorX () //X为重载的运算符
operator++() //前自增
operator++(int) //后自增
运算符重载限制
1.必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符
2.不能违反运算符原来的句法规则,即不能改变操作数数量,不能改变优先级
3.不能创建新运算符
4.不能重载下面的运算符
sizeof 运算符
. 取成员运算符
.* 成员指针运算符
:: 作用域解析运算符
?: 条件运算符
typeid RTTI运算符
const_cast 强制类型转换运算符
dynamic_cast 强制类型转换运算符
reinterpret_cast 强制类型转换运算符
static_cast 强制类型转换运算符
5.下面的运算符只能通过成员函数进行重载
= 赋值运算符
() 函数调用运算符
[] 下标运算符
-> 通过指针访问类成员的运算符
附.成员与非成员函数都可进行重载的运算符见图片
函数重载解析
多个函数完全匹配时
1.指向非const 数据的指针和引用 优先于 const 指针和引用参数匹配 (只适用于指针和引用,否则会出现二义性错误)
2.非模板函数 优先于 模板函数
3.若都为模板函数,较具体的模板函数优先,即显式具体化将优于隐式具体化,转换次数少的优于次数多的
调用时加<type> 将告诉编译器应选模板函数
例.
Swap<int>(a,b);