博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++运算符重载笔记
阅读量:7027 次
发布时间:2019-06-28

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

今天看了c++中的运算符重载,记录一下,以备后面查看:

#include 
using namespace std;class F{ int n; int d; void reduce(){ int mcd = maxcd(n < 0 ? -n : n, d); if(mcd != 1){ n /= mcd; d /= mcd; } } public: F(int n=0, int d=1):n(n), d(d){ if(d == 0) throw "分母不能为零"; if(d < 0) { this->d = -this->d; this->n = -this->n; } reduce(); cout << "F(" << n << '/' << d << ")" << endl; } static int maxcd(int a, int b){ if(a == 0) return b; return maxcd(b%a, a); } friend ostream& operator<<(ostream& o, const F& f){ o << f.n << '/' << f.d; return o; } friend F operator+(const F& lh, const F& rh){ return F(lh.n * rh.d + lh.d * rh.n, lh.d * rh.d); } //成员函数,少一个参数(当前对象作为第一个操作数) F operator*(const F& rh)const{ //匿名对象 return F(n*rh.n, d*rh.d); } friend F operator~(const F& f){ return F(f.d, f.n); } bool operator!()const{ return n==0; }};int main(){ F f1; F f2(3); F f3(6, 12); F f4(5, 3); F f5(2, 9); cout << f3 << ',' << f4 << endl; cout << F::maxcd(392, 856) << endl; cout << f3 + f4 << endl; cout << f3*f4 << f2 * f3 * f4 << endl; cout << "~f3 = " << ~f3 << endl; cout << "!f3 = " << !f3 << endl; return 0;}
注意点:

1、匿名对象

2、成员函数和友元函数对运算符重载的区别

3、临时变量只能传给引用常量(const F&),比如f1 + f2 + f3中f1 + f2返回的是一个临时变量

4、友元函数既可以在类内部实现,也可以在类外部实现,不属于类的成员函数

5、const加在方法上则说明该方法内的this指向的对象只能读取不可修改。

转载于:https://www.cnblogs.com/lanzhi/p/6468688.html

你可能感兴趣的文章
集训第五周动态规划 H题 回文串统计
查看>>
约瑟夫问题
查看>>
CM android的CMUpdater分析(一)
查看>>
2017python学习的第八天,socket的使用
查看>>
条件编译
查看>>
类百度DOC编辑区域
查看>>
[转载]Linux下终端字体颜色设置方法
查看>>
【BZOJ】4565: [Haoi2016]字符合并
查看>>
用C#的Windows Service 来同步ActiveDirectory
查看>>
GLUT Trackball Demo
查看>>
golang: impressed by its cross compiling possibilities
查看>>
QQ在线交谈一句代码搞定
查看>>
编辑拓展 对空物体进行面板上的编辑 窗口 Slider Tag 文本 枚举
查看>>
pip install selenium==版本号 报错
查看>>
ubuntu 11.10 initial configuration
查看>>
Fedora17初始配置
查看>>
spring boot项目的启动方式
查看>>
利用ROS工具从bag文件中提取图片
查看>>
jQuery可拖拽3D万花筒旋转特效
查看>>
Java常用类库
查看>>