}
return 0;
3. 复数类Imaginary(友元函数)
a) 题目描述
根据以下主函数的功能来设计复数类Imaginary,使其能正确运行。类Imaginary中应该具有描述复数的实部和虚部的私有数据成员a和b,还有相应的构造函数和按照“a±bi”格式显示复数的成员函数print()。设计类Imaginary的2个友元函数分别进行复数的加、减运算,并在这些函数调用类Imaginary的成员函数print()显示结果。 int main() {
float x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2; //输入4个数据,分别表示进行运算的两个复数的实部和虚部
Imaginary imag1(x1,y1),imag2(x2,y2); //用x1、y1创建Imaginary类对象imag1
Add(imag1,imag2); //调用友元函数求两个复数之和,按a±bi的格式显示运算结果(a和b均为实数)
Sub(imag1,imag2); //求两个复数之差并显示运算结果 return 0; } b) 输入描述
输入4个数据,分别表示进行运算的两个复数的实部和虚部 c) 输出描述
2行,分别显示两个复数进行加、减运算的结果 d) 样例输入
1 3 2 5 e) 样例输出
3+8i -1-2i
参考程序:
/******************************************************** 2012 IMIS C++ Practice 4 (Object oriented programming) Task 3
Programmed by YE Huanzhuo Lakeside Nov.28, 2012
********************************************************/ #include
using namespace std;
class Imaginary {
private: float a, b; public: Imaginary(float x, float y):a(x), b(y) {} void print() { if(a) { cout<0) cout<<\ } else if(b==0) { cout<<0; return; } if(b==1) cout<<\ else if(b==-1) cout<<\ else if(b) cout<
void Add(Imaginary c, Imaginary d) { Imaginary e(c.a+d.a, c.b+d.b); e.print(); cout< void Sub(Imaginary c, Imaginary d) { Imaginary e(c.a-d.a, c.b-d.b); e.print(); cout< } int main() { float x1,y1,x2,y2; cin>>x1>>y1>>x2>>y2; //输入4个数据,分别表示进行运算的两个复数的实部和虚部 Imaginary imag1(x1,y1),imag2(x2,y2); //用x1、y1创建Imaginary类对象imag1 Add(imag1,imag2); //调用友元函数求两个复数之和,按a±bi的格式显示运算结果(a和b均为实数) Sub(imag1,imag2); //求两个复数之差并显示运算结果 return 0; } 4. 二进制类(1)——运算符重载 a) 题目描述 将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,系统应该都能接受。另外有一个类型转换函数int(),用来将类类型向整型转换。两个重载运算符“+”,“-”,用来完成两个二进制数之间的加减运算。 class binary { //定义二进制类 char bits[16]; //二进制字模数组 public: binary(char *); //字符串参数构造函数 binary(int); //整型参数构造函数 friend binary operator +(binary,binary); //重载“+” friend binary operator -(binary,binary); //重载“-” operator int(); //类类型转换函数 void print(); }; 主函数设计如下: int main() { binary n1=\ binary n2=int(n1)+15; binary n3=n1-binary(7); n1.print(); n2.print(); n3.print(); cout< cout< 无 c) 输出描述 略 d) 样例输入 无 e) 样例输出 0000000000001011 0000000000011010 0000000000000100 31 21 9 -1 参考程序: /******************************************************** 2012 IMIS C++ Practice 4 (Object oriented programming) Task 4 Programmed by YE Huanzhuo Lakeside Nov.28, 2012 ********************************************************/ //if the program is judged by OJ, please follow C++ head file standard #include class binary { //定义二进制类 char bits[16]; //二进制字模数组 public: binary(char *); //字符串参数构造函数 binary(int); //整型参数构造函数 friend binary operator +(binary,binary); //重载“+” friend binary operator -(binary,binary); //重载“-” operator int(); //类类型转换函数 void print(); }; binary::binary(char *b) { int i, slen=strlen(b); for(i=0; i binary::binary(int a) { int i=0; while(a) { bits[i++]=a%2; a/=2; //a>>=1; } for(; i<16; i++) bits[i]=0; } binary::operator int() { int a=0, b=1, i; for(i=0; i<16; i++) { if(bits[i]) a+=b; b<<=1; //b*=2; } return a; } void binary::print() { int i; for(i=15; i>=0; i--) cout<<(int)bits[i]; cout< binary operator +(binary x,binary y) {