c++中的运算符重载

c++中的符号重载:符号的重载也是重载符合重载函数的解析规则,为了让运算符操作数更加人性化。

例如我们抽象一个类的时候,我们有一个Person

ClassPerson{
int height;
int weight;
int age;
string address
string telephone;
...........
public :
Person();
};

若我们想使用==来比较Persona Personb,但是标准的==只能用来比较c++的内置类型,而Person并不是c++的内置类型。于是我们就需要使用符号重载来使这些操作符能够用来比较我们自己定义的类型。大多数运算符都能重载,但是以下的运算符并不能重载。

:://作用域解析
.  //成员选择
.* //通过到成员的指针做成员选择
?://三元运算符
.......

那么重载的方式有哪些呢?


1.直接在类内部写重载方法

 Class Person{
     int height;
     int weight;
     int age;
     string address
     string telephone;
     ...........
   public :
     Person();
      int getA(){}
     bool  operator== (A a);//定义
};
A::bool operator== (A a){
     return this->x==a.x;
}

这里需要注意的是,正常来说,当我们重载等号的时候,想到的是参数有两个,这样才能比较,然而写在类中的运算符重载是没又有两个参数的,只有一个参数。我个人觉得,应该是这样的,当我在调用一个运算符重载的时候,已经初始化了一个类,所以不能再新建两个类,而是使用this指针获取当前类的信息。


2.友元函数

友元函数的作用是让一个函数不处于一个类的作用域之中,且不需要由一个对象去激活(this指针)但是却能访问类中的私有变量。所以使用友元函数进行运算符重载应该如下所示:

Class Person{
     int height;
     int weight;
     int age;
     string address
     string telephone;
     ...........
   public :
     Person();
      int getA(){}
     friend bool  operator== (A a,A b);//定义
};
bool operator== (A a, A b){
     return a.x==b.x;
}

3.使用内联函数

内联函数inline相当于是运行时调用,类似与c中的宏。使用内联函数的时候,我们需要注意的一点是,内联函数不能直接访问类里面的私有变量,于是我们需要使用一个get方法,才能访问到类中的私有变量。写法如下

Class Person{
     int height;
     int weight;
     int age;
     string address
     string telephone;
     ...........
   public :
     Person();
      int getA(){}
     friend bool  operator== (A a,A b);//定义
};
inline bool operator== (A a, A b){
     return a.getA()==b.getA();
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值