现在的位置: 首页 > 综合 > 正文

小火来讲—C++中的运算符重载

2018年05月05日 ⁄ 综合 ⁄ 共 1504字 ⁄ 字号 评论关闭

 最近很多朋友都来问我C++中的运算符重载这个问题..我很乐意帮助大家来解惑..只是我真的没那么多时间来帮助大家..在此我写这篇文

章,来帮助大家理解.

  在C++这种不是纯面向对象的语言中..运算符都是能重新定义内容的,,,只是原来的一些规则不能被打破...比如运算优先级别,其实这对于一

个初学者来说很难让人理解和习惯这种做法....使得C++在一般人眼中就变的难度比较大....
 
 但C++最核心的理念就是一切都由函数或者说方法构成的...连对象的构造函数.都能实现Copy,所以大家学C++一定要把这个理念搞清楚

那么什么又是运算符号重载勒?

 说白了也就是一个函数...这是一种特殊的函数...用operator 来修饰运算符...我已一个不常见的运算符号为例..但是这个符号很少用到重载
(几乎不用)

首先我来定义一个类

class Person{
  private :
      int id;
public:
     //定义重载运算符
       Person * operator ->(){
             return this;
       }
}  
这个运算符号重载就算定义好了....对于我自己来说很简单...可是对于初学者来说..理解是很困难的...为什么要这样定义勒?

其实这个运算符号只能这样定义......但是C++作者的思想是什么?

 我想大家应该都知道这是一个指针运算符号...但是C++作者又不想去改变规则..就算你重新定义好以后..他还是指真运算符号

可是这有什么用?

下面就来给大家来解释下..我认为C++作者的思想了

 他是一个函数...函数是不是优先级最高的? 答案是肯定的

所以在做运算的时候  当 Person的实例用这个重载运算符号的时,就做了这样的一件事情

我们还是用代码来理解
#include "Person.h"
#include <iostream>
using namespace std;
int main(void){
  Person person;//定义一个对象
  //我上面没有写构造函数...也没有写给属性赋值的方法....我直接拿来用....只是给大家理解.

  person.id=5;.//假设Id值为5

  int id=person->id;//这句话就是关键......让一个人很费解...person不是指针..怎么就能用到这个指针的运算符勒?

  cout<<id<<endl;//如果上面的属性是public修饰的话..那么结果绝对会是5
  return 0;           

就是来单独的解释这句话:

 int id=person->id;
 
怎么去看这句话?
person->这就是一个函数...是不是? 那既然是一个函数 是不是会先执行阿? 肯定会拉

他执行返回的结果是什么?

上面我重载的返回结果是一个this. this就代表当前调用函数对象。。那么我的返回结果是不是就是一个指针阿?

既然是一个指针。那么指针是不是就能指向对象内部可访问的属性或者方法阿?

这下大家就清楚了  person->id变成了 this->id; this->id就把值给了 id; id是不是就被赋予了新的值?肯定咯。

这个重载就讲完了

我的意思就是告诉大家。。看到重载的时候就要想下。。优先级。重载运算符号的参数。。最后返回值。。。

                                                                                                                                                                   注:
                                                                                                                                                                         小火原创 

抱歉!评论已关闭.