博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
运算符重载的两种方法
阅读量:4212 次
发布时间:2019-05-26

本文共 1969 字,大约阅读时间需要 6 分钟。

运算符重载可以通过两种方法来实现,用成员函数或者友元函数重载运算符。

在本文章中,有两个重要的内容:

第一个:  前置++ 和 后置++重载,后置++通过一个占位符来标明。

第二个:  单目运算符重载时,当作为成员函数时,操作数通过this指针隐式传递,不用在函数参数表明,而友元函数需要。双目运算符重载时,当作为成员函数时,左操作数通过this指针隐式传递,只需要声明一个参数就可以了,而友元函数需要声明两个参数。

 

代码如下:

#include
using namespace std;class Complex{private: int a; int b; //全局函数 重载+运算符 friend Complex operator+(Complex& c1, Complex& c2); //重载 前置++ friend Complex& operator++(Complex& c1); friend Complex operator++(Complex& c1, int); //通过一个占位符int来说明是后置++public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } void printCom() { cout << a << " + " << b << "i" << endl; }public: //成员函数法 实现 -运算符 Complex operator-(Complex& c2) //当函数重载是成员函数时,并且是双操作数时,左操作数通过this指针隐式传递 { Complex tmp(this->a - c2.a, this->b - c2.b); return tmp; } //前置--, 当单目运算符重载作为成员函数时,操作数通过this指针隐式传递 Complex& operator--() { this->a--; this->b--; return *this; } //后置-- Complex operator--(int) { Complex tmp = *this; this->a--; this->b--; return tmp; }};Complex operator+(Complex& c1, Complex& c2){ Complex tmp(c1.a + c2.a, c1.b + c2.b); return tmp;}//前置++Complex& operator++(Complex& c1){ c1.a++; c1.b++; return c1;}//后置++Complex operator++(Complex& c1, int){ //先使用,再让c1加加 Complex tmp = c1; c1.a++; c1.b++; return tmp;}/*全局函数、类成员函数方法实现运算符重载步骤 1)要承认操作符重载是一个函数,写出函数名称 2)根据操作数,写出函数参数 3)根据业务,完善函数返回值(看函数是返回引用 还是指针 元素),及实现函数业务*/void main(){ Complex c1(1, 2), c2(3, 4); //1 全局函数法 实现 + 运算符重载 // Complex operator+(Complex &c1, Complex &c2); Complex c3 = c1 + c2; c3.printCom(); //输出4 + 6i //2 成员函数 法 实现 -运算符重载 //c1.operator-(c2); //Complex operator-(Complex &c2) Complex c4 = c1 - c2; c4.printCom(); //输出 -2 + -2i //前置++操作符 用全局函数实现 ++c1; c1.printCom(); //输出 2 + 3i //前置--操作符 成员函数方法 --c1; c1.printCom(); //输出 1 + 2i //Complex& operator++(Complex &c1) //c1.operator--(); //后置++操作符 用全局函数实现 c1++; c1.printCom(); //输出 2 + 3i //后置--操作符 用成员函数实现 c1--; c1.printCom(); //输出 1+ 2i //c1.operator--() cout << "hello..." << endl; system("pause"); return;}

接下来,具体看如下内容:

 

转载地址:http://eezmi.baihongyu.com/

你可能感兴趣的文章
dos调度ETL转换
查看>>
mysql myisam optimize任务
查看>>
myisamchk命令使用总结
查看>>
report server tempdb 过大问题
查看>>
sql server时间戳timestamp
查看>>
mysql 添加时间戳
查看>>
为什么在WinXP系统上无法安装SQL2000的服务器组件?
查看>>
Pentaho 之Schame workbench入门实例
查看>>
pentaho 示例Cube配置详解(SQL Server版本)
查看>>
SQLSERVER数据库管理员的专用连接DAC
查看>>
SQL Server 2008中Service Broker基础应用(上)
查看>>
新下载kettle不能启动问题
查看>>
mysql sp
查看>>
SELECT ... FOR UPDATE LOCK IN SHARE MOD
查看>>
恢复oracle数据到以前的某个时间点
查看>>
mysql kettle 分页
查看>>
mongoDB 入门指南、示例
查看>>
不存在插入的一种写法
查看>>
p_vipshop_to_actual_day_shop_sale
查看>>
写MySQL存储过程实现动态执行SQL
查看>>