------------------------------------------------------------------------------------------------------
/*
**复数x被定义为二元有序实数对(a,b),记为z=a+bi,这里a和b是实数,i是虚数单位。
**在复数a+bi中,a=Re(z)称为实部,b=Im(z)称为虚部。当虚部等于零时,这个复数可以视为实数;
**当z的虚部不等于零时,实部等于零时,常称z为纯虚数。
**
**复数的四则运算规定为:
**加法法则:(a+bi)+(c+di)=(a+c)+(b+d)i;
**减法法则:(a+bi)-(c+di)=(a-c)+(b-d)i;
**乘法法则:(a+bi)·(c+di)=(ac-bd)+(bc+ad)i;
**除法法则:(a+bi)÷(c+di)=[(ac+bd)/(c2+d2)]+[(bc-ad)/(c2+d2)]i.
**
**当复数的实部和虚部都相等时,两个复数相等
**只有当复数的虚部等于零的时候两个复数才可以比较大小
**
*/
------------------------------------------------------------------------------------------------------
C++代码:
-------------------------------------------头文件-----------------------------------------------------
# ifndef __COMPLEX_H__
# define __COMPLEX_H__
# define _CRT_SECURE_NO_WARNINGS 1
# include <iostream>
# include <stdlib.h>
using namespace std;
//声明复数类
class Complex
{
public:
void Complex::Print();
public:
Complex(double real, double image);
Complex(const Complex & Z);
~Complex();
bool Complex::operator< (const Complex & Z);
bool Complex::operator> (const Complex & Z);
bool Complex::operator== (const Complex & Z);
public:
Complex ComplexAdd(const Complex & Z);
Complex ComplexSub(const Complex & Z);
Complex ComplexMul(const Complex & Z);
Complex ComplexDiv(const Complex & Z);
private:
double _real;
double _image;
};
# endif //__COMPLEX_H__----------------------------------------------函数----------------------------------------------------
# include "Complex.h"
//打印函数
void Complex::Print()
{
if (!this->_image)
{
if (!this->_real)
{
cout << 0 << endl;
}
else
cout << this->_real << endl;
}
else if (!this->_real)
{
cout << this->_image << ‘i‘ << endl;
}
else
{
if (this->_image < 0)
{
cout << this->_real << this->_image << ‘i‘ << endl;
}
else
cout << this->_real << ‘+‘ << this->_image << ‘i‘ << endl;
}
}
//构造函数
Complex::Complex(double real, double image)
{
_real = real;
_image = image;
}
//拷贝构造函数
Complex::Complex(const Complex & Z)
{
_real = Z._real;
_image = Z._image;
}
//析构函数
Complex::~Complex()
{
//这里的析构函数不需要做任何操作
}
//操作符重载
/*小于*/
bool Complex::operator< (const Complex & Z)
{
if (!this->_image && !Z._image)
{
if (this->_real < Z._real)
{
return true;
}
}
return false;
}
/*大于*/
bool Complex::operator> (const Complex & Z)
{
if (!this->_image && !Z._image)
{
if (this->_real > Z._real)
{
return true;
}
}
return false;
}
/*等于*/
bool Complex::operator== (const Complex & Z)
{
if (!this->_image && !Z._image)
{
if (this->_real == Z._real)
{
return true;
}
}
else if (this->_image == Z._image)
{
if (this->_real == Z._real)
{
return true;
}
}
return false;
}
//四则运算
/*加法*/
Complex Complex::ComplexAdd(const Complex & Z)
{
this->_real += Z._real;
this->_image += Z._image;
return *this;
}
/*减法*/
Complex Complex::ComplexSub(const Complex & Z)
{
this->_real -= Z._real;
this->_image -= Z._image;
return *this;
}
/*乘法*/
Complex Complex::ComplexMul(const Complex & Z)
{
double tmp_real = this->_real;
double tmp_image = this->_image;
tmp_real = (this->_real * Z._real) - (this->_image * Z._image);
tmp_image = (this->_image * Z._real) + (this->_real * Z._image);
this->_real = tmp_real;
this->_image = tmp_image;
return *this;
}
/*除法*/
Complex Complex::ComplexDiv(const Complex & Z)
{
double tmp_real = this->_real;
double tmp_image = this->_image;
tmp_real = ((this->_real * Z._real) + (this->_image * Z._image))
/ ((Z._real * Z._real) + (Z._image * Z._image));
tmp_image = ((this->_image * Z._real) - (this->_real * Z._image))
/ ((Z._real * Z._real) + (Z._image * Z._image));
this->_real = tmp_real;
this->_image = tmp_image;
return *this;
}------------------------------------------ 测试用例 --------------------------------------------------
# include "Complex.h"
//测试四则运算
void Test4()
{
/*测试加法*/
/*Complex Z1(1, 2);
Complex Z2(1, 2);
Z1.ComplexAdd(Z2);
Z1.Print();*/
/*测试减法*/
/*Complex Z1(-1, 2);
Complex Z2(1, 1);
Z1.ComplexSub(Z2);
Z1.Print();*/
/*测试乘法*/
/*Complex Z1(1, -2);
Complex Z2(1, 2);
Z1.ComplexMul(Z2);
Z1.Print();*/
/*测试除法*/
Complex Z1(1, 2);
Complex Z2(1, 1);
Z1.ComplexDiv(Z2);
Z1.Print();
}
//测试操作符重载
void Test3()
{
bool RET;
/*测试“<”*/
//Complex Z1(1, 4);
//Complex Z2(1, 4);
//RET = Z1 < Z2;
//cout << RET << endl;
//Complex Z3(1, 0);
//Complex Z4(2, 0);
//RET = Z3 < Z4;
//cout << RET << endl;
/*测试“>”*/
/*Complex Z1(1, 0);
Complex Z2(2, 0);
RET = Z1 > Z2;
cout << RET << endl;
Complex Z3(3, 0);
Complex Z4(2, 0);
RET = Z3 > Z4;
cout << RET << endl;*/
/*测试“==”*/
Complex Z1(1, 4);
Complex Z2(1, 4);
RET = Z1 == Z2;
cout << RET << endl;
Complex Z3(1, 1);
Complex Z4(1, 3);
RET = Z3 == Z4;
cout << RET << endl;
Complex Z5(1, 0);
Complex Z6(1, 0);
RET = Z5 == Z6;
cout << RET << endl;
}
//测试拷贝构造函数
void Test2()
{
Complex Z1(1, 3);
Z1.Print();
Complex Z2(Z1);
Z2.Print();
}
//测试构造函数
void Test1()
{
Complex Z1(1,3);
Z1.Print();
}
int main()
{
//Test1();
//Test2();
//Test3();
Test4();
system("pause");
return 0;
}-----------------------------------------------------------------------------------------------------
C++中的空类,默认产生六个默认成员函数,分别是:构造函数,拷贝(赋值)构造函数,析构函数,赋值操作符重载,取地址操作符重载,const修饰的取地址操作符重载。
所谓默认的成员函数,是指,若程序员没有创建该函数,系统则会自动创建。
------------------------------------------------------------------------------------------------------
本文出自 “无名小卒” 博客,请务必保留此出处http://814193594.blog.51cto.com/10729329/1733928
原文:http://814193594.blog.51cto.com/10729329/1733928