一、定义
为什么要重载运算符?
在c++里面的一些基本类型其运算“+-*/”等等,而你自己用class定义的类并不能进行这些基本的基本
运算,这就是为何要重载运算符,非常重要。
运算符重载的实质:
运算符重载的实质就是函数重载或函数多态。运算符重载是一种形式的C++多态。目的在于让人能用同名
的函数来完成不同的基本操作。运算符函数形式:operator p(argument -list)p为要重载的运算符符号。
二、使用
先了解一下什么运算符可以重载,什么运算符不能重载:
这些运算符是可以重载的。
而 . .* :: ?: 这些是不能重载的。
接下来写一个简单的例子来分析一下具体的重载操作:
class Teacher { public : int age; string name; }; Teacher operator + (Teacher T1,Teacher T2)//重载双目运算符的写法 { Teacher T; T.age = T1.age +T2.age ; T.name =T1.name+T2.name; return T; }; int main() { Teacher T,T1,T2; T1.age =23; T2.age =25; T1.name = "lu"; T2.name ="cifer"; T=T1+T2; printf("%d",T.age ); cout<<T.name <<endl; }
以上的例子是用了类外的函数重载的,接下来我们用成员函数来重载“+”,来看看区别。
class Teacher { public : int age; string name; public : Teacher operator + (Teacher T1)//注意此时只有一个参数存在因为this指针的存在 { Teacher T; T.age = this->age+T1.age; T.name =this->name+T1.name; return T; } }; int main() { Teacher T,T1,T2; T1.age =23; T2.age =25; T1.name = "lu"; T2.name ="cifer"; T=T1+T2; printf("%d\n",T.age ); cout<<T.name <<endl; }
接下来使用友元函数重载流操作符:
class Teacher { public : friend ostream& operator << (ostream& cout,Teacher& par);//你必须注意到流操作符重载时的写法 private: int age=20; string name= "lucifer"; }; ostream& operator << (ostream& cout,Teacher& par) { cout<<par.age<<"\n"<<par.name<<endl; return cout; } int main() { Teacher T1; cout<<T1<<endl; }
!欢迎各位指出不足之处