运算符重载的两种方式使用成员函数或者使用全局函数(友元函数)
不过是成员函数还是友元函数,最终使用方法是想用的,但是实现的过程不同,实现的代码也不一样
一个简单的运算符重载
其实运算符重载的难点在于如何理解运算符重载的过程
运算符的实际其实也是一个函数只不过是C++编译器在遇到运算符的时候会调用相应的函数,这运算符其实也是一个函数,在运算符重载的过程中只需要即将相应的函数进行相应的重载即可;

#include <iostream>
using namespace std;//重载一个复数的运算方式
class Complex
{
public:int a;int b;Complex(int a= 0,int b = 0){this->a = a;this->b =b;}void printCom(void){cout<< a << "+" << b << 'i'<< endl;}
protected:
private:
};Complex myAdd(Complex &c1,Complex &c2)
{Complex tmp(c1.a + c2.a,c1.b + c2.b);return tmp;
}
//把 operator+看成一个函数名
Complex operator+(Complex &c1,Complex &c2)
{Complex tmp(c1.a + c2.a,c1.b + c2.b);return tmp;
}
int main()
{int a=0,b=0;int c;c = a+b;//C++编译器应该给我们程序员提供一种机制//让自定义的类型也能够 进行运算符操作  ==>运算符重载机制Complex c1(1,2),c2(3,4);Complex c3(0,0);//c3 =c1 + c2;
//  c4= myAdd(c1,c2);
// c4.printCom();////////////////////////////////////////////////////////////////////////////期望的写法是    c4 = c1 +c2;//中间过程
//Complex c4 = operator+(c1,c2);
//c4.printCom();//最终步奏//经过定位发现下面的函数会调用
////////////////////////////////////////////////////////////////////////////Complex operator+(Complex &c1,Complex &c2)//{//  Complex tmp(c1.a + c2.a,c1.b + c2.b);//  return tmp;//}////////////////////////////////////////////////////////////////////////////函数//运算符的结果其实就是一个函数 只不过在程序员写好之后C++编译器会根据运算符的具体实现情况去寻找相应的实现函数Complex c4  = c1+c2;      //+ 号运算符会调用上面的函数进行运算符重载c4.printCom();cout << "hello world!" << endl;system("pause");return 0;
}

类成员函数进行运算符重载的过程很简单只需要将全局函数的运算符重载的两个引用换掉一个,使用this指针代替即可

#include <iostream>
using namespace std;//重载一个复数的运算方式
//类成员函数完成运算符重载
class Complex
{
private:int a;int b;
public:
//  friend Complex operator+(Complex &c1,Complex &c2);Complex(int a= 0,int b = 0){this->a = a;this->b =b;}void printCom(void){cout<< a << "+" << b << 'i'<< endl;}Complex operator+(Complex &c2){Complex tmp(this->a + c2.a,this->b + c2.b);return tmp;}Complex myAdd(Complex &c2){Complex tmp(this->a+ c2.a,this->b + c2.b);return tmp;}
protected:
private:
};//把 operator+看成一个函数名
//C++编译器 operator+只是一个+运算符的调用的函数  C++编译器会根据具体的需要调用对应的运算符int main()
{int a=0,b=0;int c;c = a+b;//C++编译器应该给我们程序员提供一种机制//让自定义的类型也能够 进行运算符操作  ==>运算符重载机制Complex c1(1,2),c2(3,4);Complex c3(0,0);//c3 =c1 + c2;
//  c4= myAdd(c1,c2);
// c4.printCom();////////////////////////////////////////////////////////////////////////////期望的写法是    c4 = c1 +c2;//中间过程
//Complex c4 = operator+(c1,c2);
//c4.printCom();//最终步奏//经过定位发现下面的函数会调用
////////////////////////////////////////////////////////////////////////////Complex operator+(Complex &c1,Complex &c2)//{//  Complex tmp(c1.a + c2.a,c1.b + c2.b);//  return tmp;//}////////////////////////////////////////////////////////////////////////////函数//运算符的结果其实就是一个函数 只不过在程序员写好之后C++编译器会根据运算符的具体实现情况去寻找相应的实现函数Complex c4  = c1+c2;      //+ 号运算符会调用上面的函数进行运算符重载c4.printCom();cout << "hello world!" << endl;system("pause");return 0;
}

类的友元函数完成运算符的重载

#include <iostream>
using namespace std;//重载一个复数的运算方式
//类成员函数完成运算符重载
class Complex
{
private:int a;int b;
public:friend Complex operator+(Complex &c1,Complex &c2);Complex(int a= 0,int b = 0){this->a = a;this->b =b;}void printCom(void){cout<< a << "+" << b << 'i'<< endl;}Complex myAdd(Complex &c2){Complex tmp(this->a+ c2.a,this->b + c2.b);return tmp;}
protected:
private:
};//把 operator+看成一个函数名
//C++编译器 operator+只是一个+运算符的调用的函数  C++编译器会根据具体的需要调用对应的运算符
Complex operator+(Complex &c1,Complex &c2)
{Complex tmp(c1.a + c2.a,c1.b + c2.b);return tmp;
}
int main()
{int a=0,b=0;int c;c = a+b;//C++编译器应该给我们程序员提供一种机制//让自定义的类型也能够 进行运算符操作  ==>运算符重载机制Complex c1(1,2),c2(3,4);Complex c3(0,0);//c3 =c1 + c2;
//  c4= myAdd(c1,c2);
// c4.printCom();////////////////////////////////////////////////////////////////////////////期望的写法是    c4 = c1 +c2;//中间过程
//Complex c4 = operator+(c1,c2);
//c4.printCom();//最终步奏//经过定位发现下面的函数会调用
////////////////////////////////////////////////////////////////////////////Complex operator+(Complex &c1,Complex &c2)//{//  Complex tmp(c1.a + c2.a,c1.b + c2.b);//  return tmp;//}////////////////////////////////////////////////////////////////////////////函数//运算符的结果其实就是一个函数 只不过在程序员写好之后C++编译器会根据运算符的具体实现情况去寻找相应的实现函数Complex c4  = c1+c2;      //+ 号运算符会调用上面的函数进行运算符重载c4.printCom();cout << "hello world!" << endl;system("pause");return 0;
}

二元运算符的运算符重载相关推荐

  1. c++重载运算符_Chapter13:重载——入门(一)

    一.走进重载 所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloadin ...

  2. c++运算符的全局重载

    今天在看候捷的那本stl的时候,第二章有这么一段话 注意,由于*iter != value来检查元素值是否吻合,但是本例中value的数据类型是 int,iter的类型是ListItem<int ...

  3. C 运算符中不能重载的是哪些

    C 运算符中不能重载的有:1.条件运算符"?:":2.成员访问运算符".":3.域运算符"::":4.长度运算符"sizeof&q ...

  4. c/c++ 重载运算符 函数调用运算符

    重载运算符 函数调用运算符 把一个类的对象a,当成函数来使用,比如a(),所以需要重载operator()方法.重载了函数调用运算符的类的对象,就是函数对象了. 还有什么是函数对象呢??? lambd ...

  5. C++可重载运算符和不可重载运算符

    可重载运算符: 不可重载运算符:

  6. java 运算符_java 运算符

    运算符是一些特殊的符号,主要用于数学函数,一些类型的赋值语句或逻辑比较方面.Java 中的运算符分为以下几类. 一.算数运算符 算数运算符包括: + 加法运算,字符串连接运算 - 减法运算 * 乘法运 ...

  7. lua运算与php运算符,Lua 运算符

    运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算.Lua提供了以下几种运算符类型:算术运算符 关系运算符 逻辑运算符 其他运算符 算术运算符 下表列出了 Lua 语言中的常用算术运算符, ...

  8. php中的逻辑运算符优先级,PHP运算符优先级 运算符分类

    运算符 运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西. 运算符可按照其能接受几个值来分组.一元运算符只能接受一个值,例如 !(逻辑取反运 ...

  9. c++语言运算符,c++运算符

    运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是'+'. 中文名 C++运算符 用    途 执行程序代码运算含    义 针对以上操作数项 ...

最新文章

  1. dijkstra 算法_最短路径问题Dijkstra算法详解
  2. 17.抢购(秒杀)业务的技术要点
  3. NYOJ 891 找点
  4. Xcode9学习笔记63 - 使用SystemSoundId播放简短声音(太长的无法播放)
  5. 基于CDS view生成的OData服务的metadata是如何生成的
  6. C++面试题,平时面试不可缺少的!
  7. 上手DocumentDB On Azure (二)
  8. [转]Ogre:Hardwarebuffer
  9. Rust : ? 操作符(待续)
  10. Win7部署Web网站之IIs安装篇
  11. 腐蚀rust服务器命令_腐蚀rust服务器命令一览 腐蚀rust有哪些服务器命令
  12. vmware克隆linux虚拟机,报Device eth1 does not seem to be present,delaying initialization.错误
  13. 2019最新补单安全小技巧
  14. 2.4 分块矩阵(第2章矩阵代数)
  15. 第九周博客作业西北师范大学|李晓婷
  16. 【界面设计】针对应力强度模型使用Monte-Carlo进行可靠性仿真
  17. Nmap下载和简单应用
  18. 【基于obs插件-4】-音频频谱
  19. MySQL日志(undo log 和 redo log 实现事务的原子性/持久性/一致性)
  20. 【time series】时间序列领域的Transformer综述论文笔记

热门文章

  1. hdu 1584蜘蛛牌(DFS)
  2. hdu 1007(最近点对)
  3. Mysql远程无法连接
  4. 安装node,vue编译环境
  5. JPA(二):HellWord工程
  6. JSON 常量详情参考 (内含对中文不转义的参数)
  7. [笔记]C#基础入门(十四)——C#用流程图描述程序逻辑
  8. JQuery的无缝滚动
  9. Codeforces 235B Let's Play Osu!
  10. [工具]Mac下非常好用的快捷终端Dterm