[C++]学习笔记5:运算符重载

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
请按任意键继续. . .


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值