C++ 符号重载

  1. 符号重载:c++符号增加支持自定类型的操作数.实际是一个特殊函数.函数名为:operator 符号
      c++ 支持可重载符号:
      算术运算符:+,-,*,/,%,++,--
      位操作运算符:&,|,~,^,<<,>>
      逻辑运算符:!,&&,||;
      比较运算符:<,>,>=,<=,==,!=;
      赋值运算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;
      其他运算符:[],(),->,,(逗号运算符)
      operator new  operator new[]  operator delete  operator delete[]
  2. c++ 不支持重载符号:
      . 成员选择
      .* 通过到成员的指针做成员选择
      :: 作用域解析
      ?: 三元条件运算符
      sizeof
  3.  符号重载语法:
        返回值类型  operator 符号(参数列表);
  4. 符号重载特点:
     1.不是创建一个新符号
     2.不改变符号优先级
     3.不改变符号的结合性
     4.不改变符号操作个数
  5. 符号重载定义两个方式:
     1.类的成员函数
     2.友元函数
     类的成员函数重载,如果重载符号需要两个操作数,在定义是只需要一个参数,另一个用this代替
     如果重载符号需要一个操作数,在定义是无参,用this代替
     =,(),[] 和-> 只能使用成员函数方式重载

     友元函数:重载符号需要几个操作数就定义几个参数.
    >>  << 只能使用友元函数方式重载

  6. 前置++:即++运算符位于操作数的前面,例如:++i;
    后置++:即++运算符位于操作数后面,例如:i++;
    注意一下几点:
    1、前置++重载时没有参数,而后置++重载时有参数。不会使用其参数,仅仅是区分用。
          可以理解为前置++后面有参数了,所以不需要参数
    2、前置++需要返回引用,因为重载自加运算符后可以返回对象的引用,
         以方便在表达式中连续使用。而后置++返回的不是引用,所以不能进行连续使用。

  • 复数:a+bi
#include  <iostream>
using namespace std;
class complex  
{
friend istream&  operator >>(istream& in,complex&  c);
friend ostream&  operator <<(ostream & out,complex c);
public:
	complex(double _x=0,double _y=0)
	{
		x=_x;
		y=_y;
	}
	complex operator+(complex c)//符号重载+
	{
		return complex(this->x+c.x,this->y+c.y);
	}
private:
	double  x;
	double  y;
};
//为什么 >>  << 第一个参数 和返回值都必须是引用??
//支持连续输入输出
istream&  operator >>(istream& in,complex& c)
{
	in>>c.x>>c.y;
	return in;
}

ostream&  operator <<(ostream & out,complex c)
{
	out<<c.x<<"+"<<c.y<<"i"<<endl;
	return out;
}
int main(int argc, char const *argv[])
{
	//complex c1(1,2),c2(3,4);
	complex c1,c2;
	cin>>c1>>c2;
	complex  c3=c1+c2;//这个+ 就是我们自己实现的符号重载
	cout<<c3<<endl;
	return 0;
}
  • "()" 符号重载
#include  <iostream>
using namespace std;
class  fun
{
public:
	int  operator()(int a,int b)//"()" 符号重载
	{
		return a+b;
	}
};

int main(int argc, char const *argv[])
{
	fun f;
	int ret=f(1,2);//f 是类的对象 ,()符号用成员函数方式重载,1,2参数
	cout<<ret<<endl;  //输出3
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值