65,209
社区成员
发帖
与我相关
我的任务
分享
//ComplexH.h
#ifndef Complex_H
#define Complex_H/*注意这个宏定义不要和类名相同*/
class Complex
{
private:
float real;
float image;
public:
Complex(); //构造函数
Complex(float real,float image); //构造函数
Complex(const Complex &c); //构造函数(拷贝)
Complex & operator =(const Complex &c); //重载等符号
Complex operator +(const Complex &c)const; //重载等符号
Complex operator -(const Complex &c)const; //重载等符号
Complex operator *(const Complex &c)const; //重载等符号
Complex operator /(const Complex &c)const; //重载等符号
friend void display(const Complex &c); //显示内容(友元)
friend float GetReal(const Complex &c); //获取实数部分(友元)
friend float GetImage(const Complex &c); //获取虚数部分(友元)
friend void SetReal(Complex &c,const float n); //设置实数部分(友元)
friend void SetImage(Complex &c,const float n);//设置虚数部分(友元)
~Complex(); //析构函数
};
#endif
//Complex.cpp
#include "ComplexH.h"
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
/*
Complex(); //构造函数
Complex(float real,float image); //构造函数
Complex(const Complex &c); //构造函数(拷贝)
Complex & operator =(const Complex &c); //重载等符号
Complex operator +(const Complex &c)const; //重载等符号
Complex operator -(const Complex &c)const; //重载等符号
Complex operator *(const Complex &c)const; //重载等符号
Complex operator /(const Complex &c)const; //重载等符号
friend void display(); //显示内容(友元)
friend float GetReal(const Complex &c); //获取实数部分(友元)
friend float GetImage(const Complex &c); //获取虚数部分(友元)
friend void SetReal(Complex &c,const float n); //设置实数部分(友元)
friend void SetImage(Complex &c,const float n);//设置虚数部分(友元)
~Complex(); //析构函数
*/
Complex::Complex()
{
this->image = 0;
this->real = 0;
cout<<"使用无参构造函数"
<<endl;
}
Complex::Complex(float real,float image)
{
this->real = real;
this->image = image;
cout<<"使用两个参数的构造函数"
<<"real:"<<real<<" , "
<<"image:"<<image
<<endl;
}
Complex::Complex(const Complex &c)
{
this->image = c.image;
this->real = c.real;
cout<<"拷贝函数启动"<<endl;
}
Complex::~Complex()
{
cout<<"析构函数启动!"
<<endl;
}
Complex Complex::operator +(const Complex &c)const
{
return (*new Complex(c.real + this->real,c.image + this->image));//神奇,为什么能访问C的私有成员????
}
Complex Complex::operator -(const Complex &c)const/*如果是a-b,b-a怎么区分?*/
{
return (* new Complex(this->real-c.real,this->image-c.image));
}
Complex Complex::operator *(const Complex &c)const
{
return (*new Complex(this->real*c.real-this->image*c.image,this->real*c.image+this->image*c.real));
}
Complex Complex::operator /(const Complex &c)const
{
float t = c.real * c.real + c.image * c.image;
float r,i;
if(!t)
{
cout<<"不能被0除"<<endl;
exit(-1);
}
r = this->real * c.real + this->image * c.image;
i = this->image*c.real - c.image*this->real;
return (Complex(r/t,i/t));
}
Complex& Complex::operator =(const Complex &c)/*注意此处!!!!!!!*/
{
if(this==&c)
return *this;
return (* new Complex(c.real,c.image));
}
float GetReal(const Complex &c)
{
return c.real;
}
float GetImage(const Complex &c)
{
return c.image;
}
void SetReal(Complex &c,const float n)
{
c.real = n;
}
void SetImage(Complex &c,const float n)
{
c.image = n;
}
void SetComplex(Complex &c,float real,float image)
{
SetReal(c,real);
SetImage(c,image);
}
void display(const Complex &c)
{
cout<<"display():"
<<c.real
<<" , "
<<c.image<<"i"
<<endl;
}
//Enter.cpp
#include <iostream>
#include "Complex.cpp"
using std::cin;
using std::cout;
using std::endl;
int main()
{
cout<<"****************初始化****************"<<endl;
Complex comp_a,comp_b(2,3);
cout<<"comp_a:";
display(comp_a);
cout<<"comp_b:";
display(comp_b);
cout<<"****************初始化****************"<<endl<<endl;
cout<<"****************修改****************"<<endl;
SetComplex(comp_a,1,1);
cout<<"修改comp_a为:1,1\n \bcomp_a:";
display(comp_a);
cout<<"****************修改后****************"<<endl<<endl;
cout<<"****************相加****************"<<endl;
cout<<"两数【相加】"<<endl;
display(comp_a+comp_b);
cout<<"****************相加****************"<<endl<<endl;
return 0;
}