一、复数类运算符重载

《1》分类:
在c++中,有些运算符可以重载,有些不可以重载,详情见下图:

那么,一般用的比较多的有**+、-、*、/、=、前置++,- -、后置++,- -、<<,故而,今天,我们将来实现这些操作,以复数类为例:
《2》方法
我们知道,在c++中,类的成员函数与全局函数可以互相转换,全局函数转为类的成员函数时,会将参数列表中的第一个参数隐藏起来,用一个隐式的
this**指针来代替,类的成员函数转全局函数时,过程相反,为了保证类的私有成员变量可以被该全局函数正常访问,需要在该类中声明该全局函数为其友元函数,本文着重谈类的成员函数来实现运算符的重载。
《3》特殊运算符
1、不可以使用全局函数以及其对应的友元函数来重载的操作符有 =、 ()、 [ ]、 ->、
**2、必须使用全局函数以及其对应的友元函数来重载的操作符为 << **

《4》代码实现

//类实现+、-、*、/、=、前置++、--、后置++、--
#include<iostream>
using namespace std;
class Complex
{
private://私有权限int a;int b;//friend Complex operator+(Complex &c1,Complex&c2);//成员变量为私有,借助友元函数来操作
public:Complex(int a = 0,int b = 0){this->a = a;this->b = b;}void printCom(){cout<<a<<"+"<<b<<"i"<<endl;}
//实现类的-操作Complex operator-(Complex &c2)
{Complex tmp;tmp.a = this->a - c2.a ;tmp.b = this->b -c2.b ;return tmp;
}Complex operator+(Complex&c2)
{Complex tmp;tmp.a = a +c2.a;tmp.b = b +c2.b;return tmp;
}
Complex operator*(Complex &c2)
{Complex tmp ;tmp.a = a*c2.a ;tmp.b = b*c2.b ;return tmp;
}Complex operator/(Complex &c2)
{Complex tmp;tmp.a = a / c2.a ;tmp.b = b / c2.b ;return tmp;}Complex operator=(Complex &c2)
{Complex tmp;tmp.a = c2.a ;tmp.b = c2.b ;return tmp;
}
Complex& operator++()//前置++
{this->a++;this->b++;return *this;
}Complex& operator--()//前置--
{this->a--;this->b--;return *this;
}
//后置:先使用属性,再操作自身
Complex operator++(int)//后置++
{Complex tmp = *this;tmp.a++;tmp. b++;return tmp ;
}Complex operator--(int)//后置--
{Complex tmp = *this;tmp.a--;tmp. b--;return tmp ;
}
};//运算符重载是函数,需要写函数原型
//写出函数调用语句
//完善函数原型
int main()
{Complex c1(1,2),c2(3,4);Complex c3 = c1+ c2;//Complex c4 = operator-(c2)Complex c4 =c1 - c2;Complex c5 = c1 * c2;Complex c6 = c1 / c2;Complex c7 = c1; ++c1;c1.printCom();//2+3i--c1;c1.printCom();//1+2icout<<"\n";c1++;c1.printCom();//2+3ic1--;c1.printCom();//1+2icout<<"\n";c1.printCom();//1+2ic2.printCom();//3+4ic3.printCom();//4+6ic4.printCom();//-2+-2ic5.printCom();//3+8ic6.printCom();//0+0ic7.printCom();//1+2ireturn 0;
}

《5》实验结果

《6》运算符<<的重载实现链式编程

class Complex
{
private://私有权限int a;int b;//friend Complex operator+(Complex &c1,Complex&c2);//成员变量为私有,借助友元函数来操作friend ostream& operator<<(ostream &out ,Complex &c1);
public:Complex(int a = 0,int b = 0){this->a = a;this->b = b;}void printCom(){cout<<a<<"+"<<b<<"i"<<endl;}
};ostream& operator<<(ostream &out ,Complex &c1)
{cout<<"12345王代文"<<endl;cout<<c1.a <<"+"<<c1.b<<"i"<<endl;return out;
}int main()
{Complex c1(1,2),c2(3,4);int a = 10;char *p = "abc";cout<<a<<endl;cout<<p<<endl;cout<<c1;//cout<<c1<<endl;//或者cout<<c1<<"aaa";这都是错误的,原因是cout<<c1;是一个返回值,当左值不可,除非重载cout<<c1<<"链式编程测试"<<endl;return 0;
}

《7》复数类运算符重载(+、-、*、/、=、前置++,–、后置++,–、<<)全局函数实现见下一篇博客;

【C++】Complex复数类运算符重载(类的成员函数实现)相关推荐

  1. 设计复数类Complex,实现运算符重载。

    设计复数类Complex,实现运算符重载. 要求: (1)重载运算符"+"和"*",使之分别能用于复数相加和相乘.(30分) (2)重载运算符"< ...

  2. 类与对象:类的6个默认成员函数: 构造函数、析构函数、拷贝构造函数、赋值操作符重载、默认拷贝构造与赋值运算符重载的问题、const成员函数、 取地址及const取地址操作符重载

    1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类.任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数. 构造函数 析构函数 拷贝构造函数 赋值操作符重载 const成员函数 ...

  3. C++类的六个特殊成员函数20220226

    ------------------------------------------------ 1.设置六个函数的参数,先让函数运行起来 1.1 test/Student.h #include &l ...

  4. 【 C++ 】类和对象(中)—— 类的6个默认成员函数

    目录 1.类的6个默认成员函数 2.构造函数 构造函数概念 构造函数特性 3.析构函数 析构函数概念 析构函数特性 4.拷贝构造函数 拷贝构造函数概念 拷贝构造函数特性 5.赋值运算符重载 运算符重载 ...

  5. 【C++】类和对象的默认成员函数讲解

    文章目录 简介 构造函数※※※ 系统生成的默认构造函数的特性 构造函数的初始化列表 析构函数※ 拷贝构造函数※※※ 默认的拷贝构造函数 赋值重载函数 赋值运算符的重载格式 赋值运算符只能重载成类的成员 ...

  6. [c++ 简单的笔记] 类的6个默认成员函数

    -客亦知夫水与月乎? -哀吾生之须臾 羡长江之无穷. 文章目录 类的6个默认成员函数 构造函数 构造函数初始化列表 注意 explicit关键字(了解) 拷贝构造函数 务必自己写深拷贝的情况的情况 赋 ...

  7. 面向对象 —— 类设计(十)—— 成员函数

    注意区别同名成员函数接口所属的类类型: BinNodePosi(T) BinNode<T>::insertAsLC(const T&); BinNodePosi(T) BinTre ...

  8. boost::regex模块在 cpp 文件中搜索类定义,使用绑定成员函数回调测试程序

    boost::regex模块在 cpp 文件中搜索类定义,使用绑定成员函数回调测试程序 实现功能 C++实现代码 实现功能 boost::regex模块在 cpp 文件中搜索类定义,使用绑定成员函数回 ...

  9. 3-3:类与对象中篇——默认成员函数之构造函数和析构函数

    文章目录 一:类的默认6个成员函数 二:构造函数 (1)构造函数的概念 (2)构造函数注意事项 三:析构函数 (1)析构函数的概念 (2)析构函数注意事项 一:类的默认6个成员函数 如果一个类里面什么 ...

最新文章

  1. 小程序生命周期_来,简单说说小程序的生命周期?
  2. 实现Activity刷新 (转)
  3. YYDS 的 IDEA插件,没装上的安排起来!
  4. 【并查集】 HDU 4424 Conquer a New Region 贪心
  5. c++自底向上算符优先分析_PHP程序员从入门到佛系第十弹:PHP 运算符
  6. python3 isinstance用法_对python中assert、isinstance的用法详解
  7. 接口入参形式_花椒测试平台 接口篇
  8. 外贸网站香港服务器,香港云服务器更适合小型外贸网站使用
  9. Postgresql添加/删除触发器示例
  10. [转]SQL中的case when then else end用法
  11. php生成缩略图填充白,php生成缩略图填充白边(等比缩略图方案)_PHP教程
  12. 奖励名单表格模板_“我用一套表格,解决了孩子的拖延症,一路用到小学高年级!”...
  13. 百万年薪的腾讯员工买得起深圳房子吗?
  14. HRBP与HRM的区别是什么?
  15. async await 的用法
  16. 每天都在和Maven打交道?你真的了解它吗?
  17. 申请办理美国亚马逊质量检验报告前,需准备什么资料?
  18. ifix如何设画面大小_组态软件实用技术教程第3章iFIX画面设计.ppt
  19. 电子电器外贸行业管理解决方案丨汇信
  20. 征途LINUX服务端脚本技术,腾讯征途手游脚本 辅助基本语法

热门文章

  1. git 小乌龟 配置_小乌龟(TortoiseGit)基本使用详解
  2. 200瓦PFC方案200瓦pfc控制器方案,采用ucc28019a
  3. 25岁的我失业了,学物流管理的我选择转行做软件测试,5个月靠体系化自学“跳进”阿里年薪15w+!
  4. Python+Selenium — 爬取京东搜索商品页数据
  5. 联想g50-70 ssd+win10安装教程
  6. EMC存储崩溃raid离线恢复数据方法
  7. (NIDS)网络入侵检测函数接口说明
  8. 3d饼图 vue_3D 饼图在 VUE 中的实现
  9. 微信公众号中接入图灵机器人
  10. 志宇-springBoot启动