运算符重载
运算符重载的意义
摘自百度百科。
c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。
由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。
在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。
成员函数的形式比较简单,就是在类里面定义了一个与操作符相关的函数。友元函数因为没有this指针,所以形参会多一个。
operator关键字
重载的格式 return_type operator operator_type(parameters){
}
单目运算符重载
++ -- * -> ! & ~ + -
前缀运算符和后缀运算符的不同
//前缀运算符
MyClass& operator ++ (){
++a;
return *this;
}
//后缀运算符
MyClass operator ++ (int){
MyClass newObj(a);
++a;
return newObj;
}
//指针重载
T& operator*()const{
return *(m_handler);
}
//->重载
T* operator->()const{
return m_handler;
}
双目运算符重载
//+运算符重载
MyClass operator+(int c){
MyClass newObj(a);
newObj.a =newObj.a + c;
return newObj;
}
比较运算符重载
//>=运算符重载
bool operator >= (const MyClass &newObj){
return a >= newObj.a ;
}
下标运算符重载
//下标运算符
int& operator[](int index){
return myarr[index];
}
()运算符重载
//()运算符
void operator()(string str) const{
cout << str << endl;
}
不能重载的运算符
. ?: .* sizeof ::
参考
https://wuyuans.com/2012/09/cpp-operator-overload/