最近很多朋友都来问我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是不是就被赋予了新的值?肯定咯。
这个重载就讲完了
我的意思就是告诉大家。。看到重载的时候就要想下。。优先级。重载运算符号的参数。。最后返回值。。。
注:
小火原创
章,来帮助大家理解.
在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是不是就被赋予了新的值?肯定咯。
这个重载就讲完了
我的意思就是告诉大家。。看到重载的时候就要想下。。优先级。重载运算符号的参数。。最后返回值。。。
注:
小火原创