分享
 
 
 

C++大虾们快帮帮小弟啊,急....

王朝知道·作者佚名  2010-06-24
窄屏简体版  字體: |||超大  
 
分類: 電腦/網絡 >> 程序設計 >> 其他編程語言
 
問題描述:

按下列要求创建写程序

(1)创建一个复数类complex,该类数据成员是两个int型变量real和imaginary,以友元函数形式重载提取符和插入符。

(2)在重新定义提取符时加入判断输入数据是否合法的判断。如果出现非法输入时,则设置位以示输入错。输入格式为2+5i

数据可正可负,可只一个数值,未给出的数值为0。输出格式同输入。

(3)编写main()测试上述类complex的定义的提取符和插入符进行输入输出操作。

參考答案:

//这是我工程里的一个complex.h文件

//////////////////////////////////////////////////////////////////////////

// 类名 : Complex

// 产生时间: 2002/10/16

// 所属文件: complex.h

// 功能 : 对复数进行诸如+,-,*,/,+=,-=,*=,/=操作

//

//////////////////////////////////////////////////////////////////////////

#ifndef COMPLEX_H

#define COMPLEX_H

// 修改时间: 2003年7月24日 21:00

#include <cmath>

class Complex

{

public:

Complex() : _real(0), _imag(0) {}

explicit Complex( double r) : _real(r), _imag(0) {}

Complex(double r, double i) : _real(r), _imag(i) {}

Complex& operator+=(const double& d)

{

_real += d;

return *this;

}

Complex& operator+=(const Complex& c)

{

_real += c._real;

_imag += c._imag;

return *this;

}

Complex& operator-=(const double &d)

{

_real -= d;

return *this;

}

Complex& operator-=(const Complex& c)

{

_real -= c._real;

_imag -= c._imag;

return *this;

}

Complex& operator*=(const double& d)

{

_real *= d;

_imag *= d;

return *this;

}

Complex& operator*=(const Complex& c)

{

double re = _real;

double im = _imag;

_real = re * c._real - im * c._imag;

_imag = re * c._imag + im * c._real;

return *this;

}

Complex& operator/=(const double& d)

{

_real /= d;

_imag /= d;

return *this;

}

Complex& operator/=(const Complex& c)

{

double re = _real;

double im = _imag;

double d = c._real * c._real + c._imag * c._imag;

_real = (re * c._real + im * c._imag) / d;

_imag = (im * c._real - re * c._imag) / d;

return *this;

}

Complex Conj() const

{

return Complex(_real, -_imag);

}

double Real() const { return _real; }

double Imag() const { return _imag; }

void Real(const double& re) { _real = re ; }

void Imag(const double& im) { _imag = im ; }

void Set(const double& re, const double& im){ _real = re; _imag = im ; }

double Modsq() const { return _real*_real + _imag * _imag ; }

double Mod() const { return sqrt(_real*_real + _imag * _imag); }

private:

double _real;

double _imag;

};

inline Complex operator+(const Complex& c)

{

return Complex(c.Real(), c.Imag());

}

inline Complex operator-(const Complex& c)

{

return Complex(-c.Real(), -c.Imag());

}

inline Complex operator+(const Complex& c, const double& d)

{

return Complex(c.Real() + d, c.Imag());

}

inline Complex operator+(const double& d, const Complex& c)

{

return Complex(d + c.Real(), c.Imag());

}

inline Complex operator+(const Complex& c1, const Complex& c2)

{

return Complex(c1.Real() + c2.Real(), c1.Imag() + c2.Imag());

}

inline Complex operator-(const Complex& c, const double& d)

{

return Complex(c.Real() - d, c.Imag());

}

inline Complex operator-(const double& d, const Complex& c)

{

return Complex(d - c.Real(), -c.Imag());

}

inline Complex operator-(const Complex& c1, const Complex& c2)

{

return Complex(c1.Real() - c2.Real(), c1.Imag() - c2.Imag());

}

inline Complex operator*(const Complex& c, const double& d)

{

return Complex(c.Real() * d, c.Imag() * d);

}

inline Complex operator*(const double& d, const Complex& c)

{

return Complex(c.Real() * d, c.Imag() * d);

}

inline Complex operator*(const Complex& c1, const Complex& c2)

{

double real = c1.Real() * c2.Real() - c1.Imag() * c2.Imag();

double imag = c1.Real() * c2.Imag() + c1.Imag() * c2.Real();

return Complex(real, imag);

}

inline Complex operator/(const Complex& c, const double& d)

{

return Complex(c.Real() / d, c.Imag() / d);

}

inline Complex operator/(const double& d, const Complex& c)

{

double dd = c.Real() * c.Real() + c.Imag() * c.Imag();

return Complex((d * c.Real())/dd, (-d * c.Imag())/dd);

}

inline Complex operator/(const Complex& c1, const Complex& c2)

{

double d = c2.Real() * c2.Real() + c2.Imag() * c2.Imag();

double real = (c1.Real() * c2.Real() + c1.Imag() * c2.Imag()) / d;

double imag = (c1.Imag() * c2.Real() - c1.Real() * c2.Imag()) / d;

return Complex(real, imag);

}

inline double real(const Complex &c)

{

return c.Real();

}

inline double imag(const Complex &c)

{

return c.Imag();

}

inline double abs(const Complex &c)

{

return sqrt(c.Real() * c.Real() + c.Imag() * c.Imag());

}

inline double norm(const Complex &c)

{

return c.Real() * c.Real() + c.Imag() * c.Imag();

}

inline Complex conj(const Complex &c)

{

return Complex(c.Real(), -c.Imag());

}

#endif

如果在重载<<,即:

#include <stream>

using namespace std;

ostream& operator<<(ostream &os, const Complex &c)

{

os<<c.Real()<<"+"<<c.Image()<<"i";

return os;

}

如果将

friend ostream& operator<<(ostream &os, const Complex &c);

友员申明加入到complex类中,则函数中的c.Real(),c.Image()可直接使用数据成员代替,即:c._real, c._image;

istream& operator>>(istream &in, Complex &c)

{

char str[20];

cin>>str;

istringstream is(str);

try{

char c,d;

is>>c._real>>c>>b._image>>d;

if((c != '+') && (d != 'i')) exit(1);

}

catch(...){ exit(1)}

return in;

}

在类中加入,

friend istream& operator<<(istream &in, Complex &c);

以及头文件包含

#include <sstream>

还要使用标准的C++,上面程序不能在VC6下编译成功,因为它太老了,不符合ISO C++ 98年的标准!

注意!友员不是一个很好的使用方法,尽量避免使用友员。其实由于Real(), Image()是内联函数,和直接使用数据成员效率一样!可以不必使用友员!

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有