C++操作符重载

最近看了操作符重载,《C++ primer》中提到许多,但是我看完之后没啥特别的印象,所以整理一下。

1 不能重载的操作符  ::   *      ?:

2重载操作符必须具有一个类类型的操作数

3优先级及结合性是固定的

4作为类成员的重载函数,其形参比操作数少1,是因为有一个隐含的this参,限定为第一个操作数

5当重载函数作为非成员函数,但是访问了类的私有成员,则将其定义为该类的友元函数,这其实对其他的也是使用的

6IO操作符重载必须成为非成员函数

7赋值操作符必须成为成员函数,下标操作符也是一样

8重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。

9如果返回的是全新的一个值,一个空间,比如+,那么返回类型可以使用类类型,如果返回的是原先已有的空间,比如=号的重载,最好使用的就是类类型的引用。

10通过重载定义函数对象,所谓函数对象,就是可以直接使用对象,实现函数调用等效果,用在标准库中比较多。其实就是重载操作符为(),这个重载函数的参数就是这个函数对象的参数

11函数适配器,用于扩展一元和二元的函数对象,有两类适配器:(1)绑定器 将一个操作数绑定到给定值而将二元对象转换为一元函数对象如 count_if(vec.begin,vec.end,bind2nd(less_equal<int>(),10))  bind1st将定值绑定到二元函数对象的第一个对象(2)求反器 将谓词函数对象的真值求反。not1 not2  ,not1将一元函数对象求反。比如:count_if(vec.begin,vec.end,not1(bind2nd(less_equal<int>(),10))) 

下面是一些测试的代码,就不解释了,运行一下就知道了。

class A {
 friend A operator -(A &b,A& c);
public:
 int a;
 int operator +(A & aa){
  
  return a+aa.a;
 }
 bool operator()(A & bb){
  return a>bb.a;

 }
 
};

#include"test.h"
#include<iostream>
using namespace std;
A operator -(A & b,A & c){
 b.a= b.a-c.a;
 return b;
}
void main(){
A r;
r.a=3;
A g;
g.a=2;
cout<<(r+g)<<endl;
cout<<(r-g).a<<endl;
cout<<(r+g)<<endl;
cout<<r(g)<<endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值