【说明】 以下【C++程序】实现一个简单的小型复数类MiniComplex,该复数类能进行输入、输出、复数的加法、减法、乘法和除法运算,还可以进行复数的相等比较。【C++程序】#ifndef H_MiniComplex#define H_MiniComplex#include <iostream>using namespace std;class MiniComplex{ public: //重载流插入和提取运算符 (1) ostream&operator<<(ostream &osObject,const MiniComplex&complex){ osObject<<"("<<complex.realPart<<"+"<<complex.imagPart<<"i"<<")"; return osObject; } (2) 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; //重载运算符+ MiniComplex operator-(const MiniComplex&otherComplex)const; //重载运算符- MiniComplex operator*(const MiniComplex&otherComplex)const; //重载运算符* MiniComplex operator/(const MiniComplex&otherComplex)const; //重载运算符/ bool operator==(const MiniComplex&otherComplex)const; //重载运算符== private : double (3) ; double imagPart;};#end if#include "MiniComplex.h"bool MiniComplex::operator==(const MiniComplex&otherComplex)const{ return(realPart==otherComplex.realPart&&imagPart==ortherComplex.imagPart);}MiniComplex::MiniComplex(double real,double imag){ realPart== real;imagPart==imagPart;}MiniComplex MiniComplex::operator+(const MiniComplex&otherComplex)const{ MiniComplex temp; temp.realPart = realPart+ortherComplex. realPart; temp.imagPart = imagPart +ortherComplex. imagPart; return temp;} (4) { MiniComplex temp; temp.realPart= realPart-ortherComplex. realPart; temp.imagPart = imagPart-ortherComplex. imagPart; return temp;}MiniComplex MiniComplex::operator*(const MiniComplex&otherComplex)const{ MiniComplex temp; temp.realPart = (realPart*ortherComplex. realPart)-(imagPart *ortherComplex.imagPart); temp.imagPart = (realPart*ortherComplex. imagPart)+(imagPart *ortherComplex.realPart); return temp;}MiniComplex MiniComplex::operator/(const MiniComplex&otherComplex)const{ MiniComplex temp; float tt; tt=1/(ortherComplex.realPart*ortherComplex.realPart+ortherComplex.imagPart *ortherComplex. imagPart); temp.realPart=((realPart*ortherComplex, realPart)+(imagPart *ortherComplex. imagPart))*tt; temp.imagPart =((imagPart *ortherComplex. realPart)-(realPart*ortherComplex. imagPart))*tt; return temp;}#include <iostream>#include <MiniComplex.h>using namespace std;int main(){ MiniComplex numl(23, 34),num2(56, 35); cout<<"Initial Value of num1="<<num1<<"\n Initial Value of num2="<<num2<<end1; cout<<num1<<"+"<<num2<<"="<<num1+num2<<end1; //使用重载的加号运算符 cout<<num1<<"-"<<num2<<"="<<num1-num2<<end1; //使用重载的减号运算符 cout<<num1<<"*"<<num2<<"="<<num1*num2<<end1; //使用重载的乘号运算符 cout<<num1<<"/"<<num2<<"="<<num1/num2<<end1; //使用重载的除号运算符 (5) ;}
参考答案:
解析:(1)friend (2)friend (3)RealPart (4)MiniComplex MiniComplex::operator-(const MiniComplex&otherComplex)const (5)return 0[要点解析] 这是一道要求读者掌握操作符重载的程序设计题。本题的解答思路如下。 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用别:不同类型的数据时导致不同的行为。运算符重载的实质就是函数重载,在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。 运算符的重载形式有重载为类的成员函数和重载为类的友元函数两种。其中,运算符重载为类的成员函数的一般语法形式如下。 函数类型 operator 运算符(形参表) { 函数体; } 运算符重载为类的友元函数要在类中声明友元函数的原型: friend 函数类型 operator 运算符(形参表); 然后,在类外实现函数。也可在类体中写成内联形式: friend 函数类型 operator 运算符(形参表) { 函数体; } 函数类型重载为类的成员函数时,函数的参数个数比原来的操作数个数要少一个(后置“++”、“--”除外),因为有一个操作数是对象本身,由this指针指出。后置“++”、“--”运算符重载时,为了与相应的前置运算符区别,需要一个int参数。 当重载为类的友元函数时,参数个数与原操作数个数相同,运算所需要的操作数都需要通过函数的形参表来传递,在形参表中形参从左到右的顺序就是运算符操作数的顺序。运算符重载的规则如下。 1)只能重载C++语言中已经定义过的运算符。 2)重载之后运算符的优先级和结合性都不会改变。 3)不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 对于本试题,在该小型复数类MiniComplex中,函数成员主要是重载进行复数运算的各种操作符。由于各种运算符功能的限制,将输入和输出运算符重载为友元函数,使得复数的输入和输出更加方便。因此(1)、(2)空缺处所填写的内容都足“friend"。 使用成员函数形式重载“+、-、*、/”运算符来进行复数的加法、减法、乘法和除法运算。重载逻辑运算符“==”进行复数的相等比较。数据成员包含:实部(RealPart)和虚部(ImagPart)。因此(3)空缺处所填写的内容是“RealPart”。 (4)空缺处是重载减号的函数,所以应填入“MiniComplex MiniComplex::operator-(const MiniComplex &otherComplex)const”。 由于主函数main()没有返回值,因此(5)空缺处所填写的内容是“return 0”。