运算符的重载(复数的相关运算)
来源:互联网 发布:软件接口要求 编辑:程序博客网 时间:2024/05/22 06:36
运算符的重载实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该重载的运算符时调用此函数。这个函数叫做运算符重载函数,通常为类的成员函数。
定义运算符重载函数的一般格式:
返回值类型 类名::operator重载的运算符(参数表)
{……}
注:在进行测试时,由于+=、-=、*=、/=会改变原有的值,需要分别测试。
定义运算符重载函数的一般格式:
返回值类型 类名::operator重载的运算符(参数表)
{……}
operator是关键字,它与重载的运算符一起构成函数名。因函数名的特殊性,C++编译器可以将这类函数识别出来。
具体的加减乘除等代码运算如下:
<span style="font-size:18px;">#include<iostream>#include<string>using namespace std;class Complex; //提前声明Complex operator+(int x, Complex &c); //整数和对象的运算 ostream& operator<<(ostream &out, const Complex &c); //输出流istream& operator>>(istream &in, Complex &c); //输入流class Complex //定义Complex类{friend istream& operator>>(istream &in, Complex &c);//定义友元,可以访问私有成员friend ostream& operator<<(ostream &out, const Complex &c);friend Complex operator+(int x, Complex &c);public:Complex(const double real=0,const double imag=0):m_real(real),m_imag(imag)//构造函数(初始化){}~Complex() //析构函数{}void Show()const //显示{cout<<"("<<m_real<<","<<m_imag<<")"<<endl;}Complex operator+(int x) //整型加{return Complex(m_real+x,m_imag);}Complex operator+(Complex &c) //对象加{return Complex(m_real+c.m_real,m_imag+c.m_imag);}Complex operator-(Complex &c) //对象减{return Complex(m_real-c.m_real,m_imag-c.m_imag);}Complex operator*(Complex &c) //对象乘{return Complex(m_real*c.m_real-m_imag*c.m_imag, m_real*c.m_imag+m_imag*c.m_real);}Complex operator/(Complex &c) //对象除{double t = c.m_real*c.m_real+ c.m_imag * c.m_imag;//分母return Complex((m_real *c.m_real+ m_imag * c.m_imag)/t, (m_imag *c.m_real - m_real * c.m_imag)/t);}Complex operator+=(Complex &c) //对象加等于{ return Complex(m_real+m_real+c.m_real,m_imag+m_imag+c.m_imag);}Complex operator-=(Complex &c) //对象减等于{return Complex(c.m_real,c.m_imag);}Complex operator*=(Complex &c) //对象乘等于{return Complex(m_real*m_real*c.m_real-m_real*m_imag*c.m_imag-m_imag*m_real*c.m_imag-m_imag*m_imag*c.m_real ,m_real*m_real*c.m_imag+m_real*m_imag*c.m_real+m_imag*m_real*c.m_real-m_imag*m_imag*c.m_imag);}Complex operator/=(Complex &c) //对象除等于{double t = c.m_real*c.m_real+ c.m_imag * c.m_imag;//分母的分母double m = (((m_real *c.m_real+ m_imag * c.m_imag)/t)*//分母((m_real *c.m_real+ m_imag * c.m_imag)/t)+((m_imag *c.m_real - m_real * c.m_imag)/t)*((m_imag *c.m_real - m_real * c.m_imag)/t));double a = (m_real *c.m_real+ m_imag * c.m_imag)/t;//后值的实部double b = (m_imag *c.m_real - m_real * c.m_imag)/t;//后值的虚部return Complex((m_real*a-m_imag*b)/m,(m_imag*a+m_real*b)/m);}private:double m_real; //私有成员double m_imag; //私有成员};Complex operator+(int x, Complex &c) //类外定义{return Complex(x+c.m_real,c.m_imag);}ostream& operator<<(ostream &out, const Complex &c){out<<"("<<c.m_real<<","<<c.m_imag<<")";return out;}istream& operator>>(istream &in, Complex &c){in>>c.m_real>>c.m_imag;return in;}void main() //函数测试{Complex c1(1,2);Complex c2(2,3);Complex n;int s;cin >> s; n = s;cout<<n<<endl;Complex a;a = c1 + c2;cout<<a<<endl;Complex b;b = c1 - c2;cout<<b<<endl;Complex c;c = c1 * c2;cout<<c<<endl;Complex d;d = c1 / c2;cout<<d<<endl;Complex e;e = c1 += c2;cout<<e<<endl;Complex f;f = c1 -= c2;cout<<f<<endl;Complex g;g = c1 *= c2;cout<<g<<endl;Complex k;k = c1 /= c2;cout<<k<<endl;Complex l;int x;cin >> x;l = x + c1;cout<<l<<endl;}</span>
如果有不完善的地方希望大家可以指出,谢谢~
在后期的学习中,我发现对于+=、-=、*=、/=的理解有错误,改正如下:
<span style="font-size:18px;">Complex operator+=(Complex &c) //对象加等于{ m_real = m_real+c.m_real;m_imag = m_imag+c.m_imag;return *this;}Complex operator-=(Complex &c) //对象减等于{m_real = m_real-c.m_real;m_imag = m_imag-c.m_imag;return *this;}Complex operator*=(Complex &c) //对象乘等于{int new_m_real = m_real;m_real = m_real*c.m_real-m_imag*c.m_imag;m_imag = new_m_real*c.m_imag+m_imag*c.m_real;return *this;}Complex operator/=(Complex &c) //对象除等于{double t = c.m_real*c.m_real+ c.m_imag * c.m_imag;//分母int new_m_real = m_real;m_real = (m_real *c.m_real+ m_imag * c.m_imag)/t;m_imag = (m_imag *c.m_real - new_m_real * c.m_imag)/t;return *this;}</span>
注:在进行测试时,由于+=、-=、*=、/=会改变原有的值,需要分别测试。
0 0
- 运算符的重载(复数的相关运算)
- 复数运算符的重载
- C++复数运算的运算符重载
- C++运算符重载----复数的运算
- C++实现的复数运算符重载
- 实现复数类的运算符重载
- 对复数进行的+-*/运算符重载
- 复数的运算符重载1
- 复数类中运算符的重载
- 复数类的运算符重载
- 实现复数类的运算符重载
- 复数类加减乘除的运算符重载
- 复数的运算符重载----成员函数
- [c++]复数的运算符重载
- 【C++】复数的运算符重载
- C++复数类的运算符重载
- 复数类的运算符重载
- C++复数类的运算符重载
- 顶点缓存
- C++11 的右值引用(Rvalue reference)——细微却最重要的改动
- 随记一linux基础命令操作
- 《幸福终点站》观后感·
- java写的wtmpx解析文件,新手第一次,弄了好久,自己备份一下
- 运算符的重载(复数的相关运算)
- 索引缓存
- Mac os Android开发环境搭建-macports、ndk、sdk、Android源码
- centeros7连接wifi
- 【Linux】进程调度概述
- Json学习笔记
- C#进阶ADO.NET基础一 基本概念、数据库连接操作基础
- 接上一篇博文,继续双机通信问题研究
- Oracle 10046事件详解