运算符重载的几个小例子
2018-03-14 21:49
176 查看
1.坐标 :
#include <iostream> using namespace std; /** * 定义Coordinate类 * 数据成员:m_iX,m_iY * 成员函数:构造函数 * 重载--运算符,重载+运算符 */ class Coordinate // 坐标 { public: Coordinate(int x, int y) { m_iX = x ; m_iY = y ; } // 前置--运算符重载 Coordinate &operator--( ){ --m_iX ; --m_iY ; return *this ; } // 后置--运算符重载 Coordinate operator--(int ){ Coordinate temp(*this) ; this->m_iX-- ; this->m_iY-- ; return temp ; } // +号运算符重载 Coordinate operator+(Coordinate &temp2){ int x = this->m_iX + temp2.m_iX ; int y = this->m_iY + temp2.m_iY ; return Coordinate(x,y); } public: int m_iX; int m_iY; }; int main(void) { Coordinate coor1(1, 3); Coordinate coor2(2, 4); Coordinate coor3(0, 0); coor1--; //(0,2) --coor2; //1,3 coor3 = coor1 + coor2; //1,5 cout << coor3.m_iX << endl; cout << coor3.m_iY << endl; return 0; }
重点与难点:前置减减与后置减减的重载
// 前置--运算符重载 Coordinate &operator--( ){ --m_iX ; --m_iY ; return *this ; } // 后置--运算符重载 Coordinate operator--(int ){ //好象是必须要写为int 参数 Coordinate temp(*this) ; this->m_iX-- ; this->m_iY-- ; return temp ; }
执行结果:
2.复数的加减乘除运算 :
#include<iostream> using namespace std; //复数 class plural{ public: plural() = default ; plural(int a,int b):Real_component(a),Imaginary_part(b){} plural operator+(plural &) ; // 重载 + 号 plural operator-(plural &) ; // 重载 - 号 plural operator*(plural &) ; // 重载 * 号 void print() ; private: int Real_component ; //实部 int Imaginary_part ; //虚部 }; plural plural::operator+(plural &a ) { plural temp ; temp.Real_component = a.Real_component + Real_component ; temp.Imaginary_part = a.Imaginary_part + Imaginary_part ; return temp ; } plural plural::operator-(plural &b ) { int x = Real_component - b.Real_component ; int y = Imaginary_part - b.Imaginary_part ; return plural(x,y); } plural plural::operator*(plural &c ) { int x = c.Real_component *Real_component - c.Imaginary_part*Imaginary_part ; int y = c.Real_component * Imaginary_part + c.Imaginary_part * Real_component ; return plural(x,y) ; } void plural::print() { if(Imaginary_part < 0) cout << Real_component << Imaginary_part << "i " << endl ; else cout << Real_component << "+" << Imaginary_part << "i " << endl ; } int main(void) { plural f1(1,-4),f2(-1,9) ,add ; cout << "f1 == " ; f1.print(); cout << "f2 == " ; f2.print(); add = f1 +f2 ; cout << "f1 + f2 == " ; add.print() ; plural sub = f1 - f2 ; cout << "f1 - f2 == " ; sub.print(); plural mul = f1 * f2 ; cout << "f1 * f2 == " ; mul.print(); return 0; }
执行结果:
3.有理数的加减乘除运算:
#include<iostream> #include<cmath> using namespace std ; // 有理数 class RationalNumber{ public: RationalNumber() = default; RationalNumber(int a,int b):molecular(a),denominator(b){} RationalNumber operator + (RationalNumber &); RationalNumber operator - (RationalNumber &); RationalNumber operator * (RationalNumber &); RationalNumber operator / (RationalNumber &); void print() ; private: RationalNumber &reduction(); int molecular ; //分子 int denominator ; //分母 }; //考虑分母为零和化简 int gcd(int a,int b) //找到最大公约数 { return a%b ?gcd(b,a%b):b; //gcd 算 法 } RationalNumber &RationalNumber::reduction() //化简函数 { if(denominator < 0 ) { molecular = -molecular ; denominator = -denominator ; } int temp = gcd(abs(molecular),abs(denominator)); molecular /= temp ; denominator /= temp ; return *this ; //改变调用对象 } RationalNumber RationalNumber:: operator + (RationalNumber &rhs) { int a,b,c,d ; a = molecular ; b= denominator ; c= rhs.molecular ; d= rhs.denominator ; return RationalNumber(a*d+b*c,b*d); } RationalNumber RationalNumber:: operator - (RationalNumber &rhs) { int a,b ; int multiy ; multiy = rhs.denominator * denominator ; a = molecular* rhs.denominator ; b= denominator * rhs.molecular ; return RationalNumber(a-b,multiy); } RationalNumber RationalNumber:: operator * (RationalNumber &rhs) { int a,b,c,d ; a = molecular ; b= denominator ; c= rhs.molecular ; d= rhs.denominator ; return RationalNumber(a*c,b*d); } RationalNumber RationalNumber:: operator / (RationalNumber &rhs) { int a,b,c,d ; a = molecular ; b= denominator ; c= rhs.molecular ; d= rhs.denominator ; return RationalNumber(a*d,b*c); } void RationalNumber::print() { reduction(); cout << molecular << "/ " << denominator << endl ; } int main(void) { RationalNumber t1(8,-16),t2(2,3) ,t3 ; cout << "t1 == " ; t1.print() ; cout << "t2 == " ; t2.print() ; cout << "t1 + t2 == " ; t3 = t1 + t2 ; t3.print() ; cout << "t1 - t2 == " ; t3 = t1 - t2 ; t3.print() ; cout << "t1 * t2 == " ; t3 = t1 * t2 ; t3.print() ; cout << "t1 / t2 == " ; t3 = t1 / t2 ; t3.print() ; cout << endl ; return 0; }
执行结果:
4.实现自己的 string 类
代码地址:
https://github.com/liushengxi13689209566/C-/tree/master/%E7%BB%83%E6%89%8B%E5%B0%8F%E9%A1%B9%E7%9B%AE/my_string%E7%B1%BB相关文章推荐
- 几个典型的小例子
- opengl 模板测试的几个例子
- MapReduce几个典型的例子
- 多线程操作的几个例子
- 深入理解JAVA的几个例子
- Linux 上的TC 流量控制几个例子
- map之类数据集合的几个代码小例子
- Delphi的几个跨平台小游戏例子。
- java--String常量池问题的几个例子
- ActiveX Control在sdk中的几个例子
- 关于java多线程的几个例子
- C++学习笔记之运算符重载例子
- 深入理解js的几个小例子
- 几个存储过程的例子
- Lua时间转化的几个小例子
- javascript的几个小例子
- 几个js的小例子
- 总结了下PHPExcel官方读取的几个例子
- 几个例子说明js是怎样处理Json的
- php冒泡排序实现方法,传入几个数字排序后 输出实战例子