重新认识c++(01),做个简单的复数Complex类
来源:互联网 发布:手机上怎样查淘宝积分 编辑:程序博客网 时间:2024/06/06 00:18
最近看了一下Effect c++ 想要重新理解一下c++的机制以及内存布局,还是想搞这方面的研究,对底层不明白,总是有点很不踏实。
那就写了一个 Complex 类,这个类还是相对比较全的,基本上涵盖了一些运算。请大神飘过,勿噴,谢谢合作。
Complex.h文件
#ifndef __COMPLEX_H__#define __COMPLEX_H__#include <iostream>#include <string>using namespace std ;class Complex{public: Complex(); Complex(Complex&); Complex(double); Complex(double,double); Complex& operator = (Complex&); ~Complex(); double getA(); double getB(); void setA(double); void setB(double); Complex operator + (double); Complex operator - (double); Complex operator * (double); Complex operator / (double); Complex& operator += (double); Complex& operator -= (double); Complex& operator *= (double); Complex& operator /= (double); bool operator == (double); bool operator == (Complex &c); Complex operator + (Complex&); Complex operator - (Complex&); Complex operator * (Complex&); Complex operator / (Complex&); Complex& operator += (Complex&); Complex& operator -= (Complex&); Complex& operator *= (Complex&); Complex& operator /= (Complex&);private: double a; double b;};ostream& operator << (ostream &,Complex &);Complex operator + (double,Complex &);Complex operator - (double,Complex &);Complex operator * (double,Complex &);Complex operator / (double,Complex &);Complex pow(Complex &,int);#endif // __COMPLEX_H__
Complex.cpp文件
#include "Complex.h"Complex::Complex():a(0),b(0){}Complex::Complex(Complex& c):a(c.getA()),b(c.getB()){}Complex::Complex(double _a):a(_a),b(0){}Complex::Complex(double _a,double _b):a(_a),b(_b){}Complex::~Complex(){};Complex& Complex::operator = (Complex&c){ this->a = c.getA() ; this->b = c.getB() ; return *this;}double Complex::getA(){ return this->a;}double Complex::getB(){ return this->b;};void Complex::setA(double _a){ this->a = _a ;}void Complex::setB(double _b){ this->b = _b ;}bool Complex::operator == (double a){ Complex c(a); return *this == c ;}bool Complex::operator == (Complex &c){ if(this->a == c.getA() && this->b == c.getB())return true; return false;}Complex& Complex::operator += (Complex&c){ this->a += c.getA() ; this->b += c.getB() ; return *this;}Complex& Complex::operator -= (Complex&c){ this->a -= c.getA() ; this->b -= c.getB() ; return *this;}Complex& Complex::operator *= (Complex&c){ this->a = ((this->a)*(c.getA()) - (this->b)*(c.getB())); this->b = ((this->a)*(c.getB()) + (this->b)*(c.getA())); return *this;}Complex& Complex::operator /= (Complex&c){ if(c == 0)throw "error" ; else { *this = (*this) / c ; } return *this;}Complex& Complex::operator += (double a){ Complex r(a) ; *this+=r; return *this;}Complex& Complex::operator -= (double a){ Complex r(a) ; *this-=r; return *this;}Complex& Complex::operator *= (double a){ Complex r(a) ; *this*=r; return *this;}Complex& Complex::operator /= (double a){ Complex r(a) ; *this/=r; return *this;}Complex Complex::operator + (Complex&c){ Complex r ; r.setA(this->a + c.getA()) ; r.setB(this->b + c.getB()) ; return r ;}Complex Complex::operator - (Complex&c){ Complex r ; r.setA(this->a - c.getA()) ; r.setB(this->b - c.getB()) ; return r ;}Complex Complex::operator * (Complex&c){ Complex r ; r.setA(((this->a)*(c.getA()) - (this->b)*(c.getB()))) ; r.setB(((this->a)*(c.getB()) + (this->b)*(c.getA()))) ; return r ;}Complex Complex::operator / (Complex&c){ Complex r = c; if(c == 0 )throw "error" ; double t = c.getA()*c.getA() + c.getB()*c.getB() ; r.setB(-1*r.getB()) ; r = ((*this) * r) * (1.0/t) ; return r;}Complex Complex::operator + (double a){ Complex r(a) ; return (*this)+r;}Complex Complex::operator - (double a){ Complex r(a) ; return (*this)-r;}Complex Complex::operator * (double a){ Complex r(a) ; return (*this)*r;}Complex Complex::operator / (double a){ Complex r(a) ; return (*this)/r;}ostream& operator << (ostream &out,Complex &c){ double a = c.getA() ; double b = c.getB() ; if(a == 0 ) { if(b==0)out<<0; else out<<b<<"i"; } else if(b==0)out<<a; else if(b>0)out<<a<<"+"<<b<<"i"; else out<<a<<b<<"i"; return out;}Complex operator + (double a,Complex &c){ Complex r(a) ; return r+c;}Complex operator - (double a,Complex &c){ Complex r(a) ; return r-c;}Complex operator * (double a,Complex &c){ Complex r(a) ; return r*c;}Complex operator / (double a,Complex &c){ Complex r(a) ; return r/c;}
Main.cpp文件
#include <iostream>#include "Complex.h"using namespace std;int main(){ Complex a(1,2); Complex b(2,3); cout<<a+b<<endl; cout<<a-b<<endl; cout<<a*b<<endl; cout<<a/b<<endl; cout<<a+b-a*b/a<<endl; return 0;}
测试结果:
可能写的仓促,没有想到的功能。逐渐完善。
3 0
- 重新认识c++(01),做个简单的复数Complex类
- 简单的复数Complex类实现
- 【C++】c++复数类Complex
- 【C++】操作符重载及实现简单的复数类Complex
- ||Python||complex复数类型的简单介绍
- C#复数类Complex的封装
- c++复数类Complex的编写
- 设计复数类complex
- 设计复数类Complex
- 设计复数类Complex
- 复数类Complex
- 复数类Complex
- complex复数类
- C++ Complex复数类
- 复数类:class Complex
- 复数类:complex c++
- 复数类 Complex
- Complex复数类
- [转载]android—OpenGL—GL10方法解析(转载)
- GUETOJ - 1119 How many ways(动态规划)
- Fedora安装vmware-tools后系统无法正常启动的解决方法
- 插入排序
- wait waitpid WNOHANG 僵尸进程
- 重新认识c++(01),做个简单的复数Complex类
- MSSQL与MySQL语法区别
- ARM ADC程序设计
- 毕业论文参考文献规范格式
- 我们什么时候应该使用异常
- unity3d中C#委托的应用
- Android的shape和颜色选择器结合使用
- C++模版的特化
- Android即时通信系 之openfire安装