问答题 请使用VC6或使用【答题】菜单打开 proj3下的工程proj3,其中声明了MiniComplex是一个用于表示复数的类。请编写这个operator+运算符函数,以实现复数的求和运算。两个复数的和是指这样一个复数:其实部等于两个复数的实部之和,其虚部等于两个复数的虚部之和。例如,(23+34i)+(56+35i)等于(79+69i)。
要求:
补充编制的内容写在“// *******333*******”与“// *******666*******”之间,不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。
//Minicomplex.h
#include <iostream>
using namespace std;
class MiniComplex //复数类
{
public:
friend ostream& operator << (ostream& osObject, const MiniComplex& complex)
{
osObject << "(" << complex.realPart << "+" << complex.imagPart << "i" << ")";
return osObject;
}
friend istream& operator >> (istream& isObject, MiniComplex& complex)
{
char ch;
isObject >> complex, realPart >> ch >> complex.imagPart >> ch;
return isObject;
}
MiniComplex (double real = 0, double imag = 0);
//构造函数
MiniComplex operator + (const MiniComplex& otherComplex) const;
//重载运算符+
private:
double realPart; //存储实部变量
double imagPart; //存储虚部变量
};
void writeToFile(char *);
//main.cpp
#include "MiniComplex.h"
MiniComplex::MiniComplex (double real, double imag){realPart=real;imagPart=imag;}
MiniComplex MiniComplex::operator+(const MiniComplex& otherComplex) const
{
// ********333********

// ********666********
}
int main()
{
void writeToFile(char * );
MiniComplex num1 (23,34),num2 (56,35);
cout << "Initial Value of Num1 =" << num1 << "/nInitial Value of Num2 =" << num2 << endl;
cout << num1 << "+" << num2 << "=" << num1 + num2 << endl; //使用重载的加号运算符
writeToFile (" ");
return 0;
}
【正确答案】
【答案解析】MiniComplex sum; //定义复数对象Sum
sum.imagPart = this -> imagPart + otherComplex.imagPart; //把this中的虚部(this->imagPart)和othercomplex虚部相加赋值给Sum虚部
sum.realPart = this -> realPart + otherComplex.realPart; //把this中的实部(this->reapart)加上othercomplex实部复制给Sum实部
return sum; //返回对象Sum
答案考生文件夹 [考点] 本题考查MiniComplex类,其中涉及友元函数、运算符重载和构造函数。运算符重载首先要理解被重载的运算符的含义,其次要掌握类的定义。
[解析] 主要考查考生对运算符重载的掌握,题目要求编写operater+运算符函数,以实现复数的求和与运算。复数的和的实部等于两个复数的实部之和,虚部等于两个复数的虚部之和。函数要返回的类型是MiniComplex,因此要先定义一个MiniComplex类型变量sum,然后对它们的实部和虚部各自求和,返回sum即可。