1.可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。
重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
2.方法
函数类型 operator 运算符名称(形参列表){函数体}
如:Complex operator +(Complex &c1,Complex &c2)
用+来计算复数的相加
//运算符的重载
#include<iostream>
using namespace std;
class com{
private:
int real;
int vir;
public:
com(){
};
com(int ,int );
void display();
int getreal(){
return real;
}
int getvir(){
return vir;
}
setreal(int r){
real = r;
}
setvir(int v){
vir = v;
}
};
com::com(int r,int v){
real = r;
vir = v;
}
com operator +(com a,com b){
com c;
int r,v;
r = a.getreal() + b.getreal();
v = a.getvir() + b.getvir();
c.setreal(r);
c.setvir(v);
return c;
}
void com::display(){
cout << real << "+" << vir << "i" << endl;
}
int main(){
com c1(3,4),c2(5,6),c3;
c3 = c1 + c2;//此时c1和c2的实部和虚部都分别相加
c3.display();
return 0;
}
3.重载流插入运算符和流提取运算符
自定义类无法使用流运算符“<<”“>>”进行输入输出
必需对流运算符进行重载
重载流运算符的方法
输入流:istream &operator>>(istream & ,class &);
输出流:ostream &operator<<(ostream & ,class &);
istream:输入流类:cin为该类的对象
ostream:输出流类:cout为该类的对象
只能将重载流运算的函数作为友元函数或者普通函数使用(第一个参数不是本对象)
例如,使用<<输出复数
ostream &operator <<(ostream &opt,com &c){
opt<<c.getreal()<<"+"<<c.getvir()<<"i"<<endl;
return opt;
/*在函数中,用opt代替cout进行操作,并返回opt的值
cout也是ostream对象,opt是其引用(opt也可为其他名称)*/
}
#include<iostream>
using namespace std;
class com{
private:
int real;
int vir;
public:
com(){
};
com(int ,int );
void display();
int getreal(){
return real;
}
int getvir(){
return vir;
}
setreal(int r){
real = r;
}
setvir(int v){
vir = v;
}
};
com::com(int r,int v){
real = r;
vir = v;
}
com operator +(com a,com b){
com c;
int r,v;
r = a.getreal() + b.getreal();
v = a.getvir() + b.getvir();
c.setreal(r);
c.setvir(v);
return c;
}
ostream &operator <<(ostream &opt,com &c){
opt<<c.getreal()<<"+"<<c.getvir()<<"i"<<endl;
return opt;
}
void com::display(){
cout << real << "+" << vir << "i" << endl;
}
int main(){
com c1(3,4),c2(5,6),c3;
c3 = c1 + c2;//此时c1和c2的实部和虚部都分别相加
cout<<c3;
return 0;
}
8+10i
--------------------------------
Process exited after 3.039 seconds with return value 0
请按任意键继续. . .