使用VC6打开考生文件夹下的工程test38_3。此工程包含一个test38_3.cpp,其中定义了类complex,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)添加类complex的无参数的构造函数的定义,将私有成员real和imag都初始化为0。请在注释“//**1**”之后添加适当的语句。 (2)添加类complex的带两个参数的重载构造函数,两个参数r和i都是double类型,要求将r赋值给私有成员real, i赋值给私有成员imag,同时允许调用时参数i可是省略,请在注释“//**2**”之后添加适当的语句。 (3)完成类complex重载加法函数的定义,该函数直接返回一个类complex的对象,同时把参数对象c的实部real和虚部imag分别与当前对象对应部分分别相加,请在注释“//**3**”之后添加适当的语句。 (4)完成类complex的友元函数print的定义,使其以格式“real+imagi”输出,请在注释“//**4**”之后添加适当的语句。 源程序文件test38_3.cpp清单如下; #include <iostream.h> class complex { public:// ** 1 **// ** 2 **{ real=r;imag=i;}complex operator+(complex & c);friend void print(complex &c); private:double real,imag; }; complex complex::operator+(complex & c){// ** 3 ** } // ** 4 **cout<<c.real<<"+"<<c.imag<<"i"<<endl; } void main( ) {complex c1(2.0,3.0),c2(4.0,-2.0),c3;c3=c1+c2;print(c3);c3=c3+complex(3.5);print(c3); }
参考答案:
解析:(1) complex( ) {real=imag=0; } (2) complex(double r, double i=0) (3) return complex(real+c.real,imag+c.imag); (4) void print(complex &c) 主要考查考生对于类的构造函数重载、缺省参数的设置、运算符的重载和友元函数的定义的掌握,其中(2)使用了参数赋初值的方式使得带两个参数的构造函数可以省略后一个参数,这是一种重要的方法,(3)直接返回类的一个使用带两个参数的构造函数生成的临时对象,这是把运算符重载为类的成员函数时经常使用的方式,(4)友元函数应该在类内声明,类外定义.调用时和普通函数—样,这—点要切记。