应用题
1. 使用VC++2010打开考生文件夹下“proj2”文件夹中的工程proj2.sln。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:
(1)定义复数类CComplex的私有成员变量real和imaginary,分别用来表示复数的实部和虚部,都是double类型的变量。请在注释//********1********后添加适当的语句。
(2)添加复数类CComplex的带一个参数的构造函数,分别将real和imaginary赋值为参数r和0。请在注释//********2********后添加适当的语句。
(3)完成对运算符“+”的重载,分别对复数的实部和虚部相加。请在注释//********3********后添加适当的语句。
(4)完成复数的友元函数Equal(CComplex& c1,CComplex & c2)的定义,如果两个数的实部和虚部都相等,则返回1,否则返回0,请在注释//********4********后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
#include<iostream.h>
class CComplex
{
private:
//********1********
public:
CComplex()
{
real = imaginary = 0;
}
CComplex(double r) {
//********2********
}
CComplex operator+(CComplex& c1) {
//********3********
temp.real= real+c1.real;
temp.imaginary=
imaginary+c1.imaginary;
return temp;
}
void Set(int re,int imag)
{
real = re;
imaginary = imag;
}
friend bool Equal(CComplex& c1,CComplex& c2);
};
bool Equal(CComplex& c1, CComplex& c2)
{
//********4********
}
int main()
{
CComplex complex1(5);
CComplex complex2;
cout<<Equal(complex1,comp lex2)<<endl;
complex2.Set(5,0);
cout<<Equal(complex1,comp lex2)<<endl;
return 0;
}
【正确答案】(1)添加语句:double real,imaginary;
(2)添加语句:real=r; imaginary=0;
(3)添加语句:CComplex temp;
(4)添加语句:return (c1.real==c2.real) && (c1.imaginary==c2.imaginary);
【答案解析】 程序中定义了类CComplex,含有私有成员变量real和imaginary,分别用来表示复数的实部和虚部,CComplex类有两个构造函数、对运算符“+”的重载、Set(int re,int imag)可改变实部和虚部的值、友元Equal(CComplex& c1,CComplex& c2)函数可判断两个CComplex对象是否相等。
(1)第1个标识下完成定义复数类CComplex的私有成员变量real和imaginary,均为double类型的变量,因此第1个标识下应添加“double real,imaginary;”。
(2)构造函数CComplex(double r)完成类的初始化,该构造函数有一个参数,分别将real和imaginary赋值为参数r和0,因此第2个标识下应添加“real=r; imaginary=0;”。
(3)编译程序可知,变量temp没有定义,由operator+(CComplex& c1)函数体的语句可知,temp为函数的返回值,而operator+(CComplex& c1)函数体函数返回CComplex类对象,故在第3个标识下补充temp定义,即“CComplex temp;”。
(4)即判断两个对象c1和c2的实部和虚部是否均相等,两个逻辑结果相与即可,因此第4个标识下应添加“return (c1.real==c2.real)&&(c1.imaginary==c2.imaginary);”。