《类与对象》课后习题(含答案)
- 格式:pdf
- 大小:130.02 KB
- 文档页数:13
C++第三章课后答案C++第三章习题及答案1、什么是结构化程序设计?它有什么优缺点?所谓结构化程序设计,是一种自顶而下、逐步求精的模块化程序设计方法。
2、什么是对象?什么是类?简述对象与类之间的关系!对象是系统中用来描述客观事物的一个实体,它是用于构成系统的一个基本单位,而系统可以看作是由一系列相互作用的对象组成。
类定义了同类对象的公共属性和行为,属性用数据结构表示,行为用函数表示!《类=数据结构+对数据进行操作的函数》。
对象和类的关系相当于元素和集合的关系、变量和变量的“数据类型”的关系。
从程序设计的角度来说,类是一种复杂的自定义数据类型,对象是属于这种数据类型的变量。
3、什么是面向对象程序设计?面向对象程序设计方法具有哪些基本特征?请比较面向对象程序设计和面向对象过程程序设计有何异同?4、何谓成员变量?何谓成员函数?C++将对象的属性抽象为数据成员,将对象的行为抽象为成员函数。
5、C++中结构和类之间有何异同?结构在默认情况下的成员是公共的,而类在默认情况下的成员是私有的。
在C++中,结构是特殊的类。
6、在C++中如何定义类?如何实现定义的类?如何利用类申明对象?7、类的成员的访问权限有哪几种?请说明它们分别有什么作用?三种,privte:类的私有成员,只能被本类的成员函数访问或调用。
Public:公有成员,可以被本类的成员或其他类的成员函数(通过对象)访问或调用。
Protected:保护成员,可以被本类的成员函数或派生类的成员函数访问或调用。
8、何谓构造函数?何谓析构函数?请说明它们分别有什么作用?构造函数:不需要用户程序调用,就能在创建对象时由系统自动调用,其作用是在对象被创建时利用初始值去构造对象,使得在声明对象时就能自动完成对象的初始化。
析构函数:在对象的生存周期即将结束时由系统自动调用的,其作用是用来在对象被删除前做一些清理工作和数据保存工作。
9、如何定义一个内联成员函数?内联函:内联函数必须是和函数体申明在一起,才有效。
UML课后习题答案UML习题答案第⼀章⾯向对象设计与UML1.填空题(1)基本构造块UML规则公共机制(2)名字属性操作(3)封装继承多态(4)继承(5)瀑布模型喷泉模型基于组件的开发模型XP开发模型2. 选择题(1)C(2)A B C D(3)A B C D(4)A B C(5)A3.简答题(1)类是具有相同或相似结构、操作和约束规则的对象组成的集合,⽽对象是某⼀类的具体化实例,每⼀个类都是具有某些共同特征的对象的抽象。
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,⽽对⼀类对象的抽象就是类.类描述了⼀组有相同特性和相同⾏为的对象。
(2)1.UML是⼀种语⾔。
2. UML是⽤来建模的。
3.UML是统⼀的标准。
(3)建模能够帮助我们按照实际情况或按我们需要的形式对系统进⾏可视化;提供⼀种详细说明系统的结构或⾏为的⽅法;给出⼀个指导系统构造的模板;对我们所做出的决策进⾏⽂档化。
在建模时应遵循以下原则:选择要创建什么模型对如何动⼿解决问题和如何形成解决⽅案有着意义深远的影响;每⼀种模型可以在不同的精度级别上表⽰;最好的模型是与现实相联系的;单个模型不充分;对每个重要的系统最好⽤⼀组⼏乎独⽴的模型去处理。
(4)UML和⾯向对象软件开发之间有紧密的关系,可以说是⾯向对象软件开发促使了UML 的产⽣。
但是由于在UML标准化的过程中,吸收了业务建模、⼯作流建模和数据库建模等领域的标准规范,形成了适应性很强的标准。
(5)在软件设计过程中,使⽤UML建模是为了能够更好地理解正在开发的系统。
通过UML 建模,可以达到以下⽬的:有助于按照实际情况或按照所需要的样式对系统进⾏可视化;能够规约系统的结构或⾏为;给出了指导构造系统的模板;对做出的决策进⾏⽂档化。
第⼆章UML通⽤知识点综述1.填空题(1)依赖泛化关联实现(2)视图图模型元素(3)实现视图部署视图(4)构造型标记值约束(5)规格说明修饰通⽤划分2. 选择题(2)C(3)A(4)A B(5)D3.简答题(1)在UML中,定义了四种基本的⾯向对象的事物,分别是结构事物、⾏为事物、分组事物和注释事物等。
类与对象习题类与对象选择题5.若有以下说明,在类外使⽤对象objX成员的正确语句是( c )。
class X{ int a;void fun1();public:void fun2();};X objX ;(a) objX.a=0; (b) objX.fun1(); (c) objX.fun2(); (d) X::fun1();6.若有以下说明,对n的正确访问语句是( b )。
class Y{ //…… ;public:static int n;};int Y::n;Y objY;(a) n=1; (b) Y::n=1; (c) objY::n=1; (d) Y->n9.若有以下类T说明,函数fFriend的错误定义是( c )。
class T{ int i;friend void fFriend(T&,int) ;};(a) void fFriend(T &objT,int k) { objT.i = k; }(b) void fFriend(T &objT,int k) { k = objT.i; }(c) void T::fFriend(T &objT,int k) { k += objT.i; }(d) void fFriend(T &objT,int k) { objT.i += k; }10.在类定义的外部,可以被访问的成员有( c )。
(a) 所有类成员(b) private或protected的类成员(c) public的类成员(d) public或private的类成员12.说明⼀个类的对象时,系统⾃动调⽤( b );撤消对象时,系统⾃动调⽤( c )。
1(a) 成员函数(b) 构造函数(c) 析构函数(d) 友员函数13.下⾯对构造函数的不正确描述是( b )。
(a) 系统提供默认的构造函数(b) 构造函数可以有参数,所以也可以有返回值(c) 构造函数可以重载(d) 构造函数可以设置默认参数14.下⾯对析构函数的正确描述是( c )。
1:下列有关类的说法不正确的是()。
A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。
2:下面()项是对构造函数和析构函数的正确定义。
A.void X::X(), void X::~X()B.X::X(参数), X::~X()C.X::X(参数), X::~X(参数)D.void X::X(参数), void X::~X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。
3:()的功能是对象进行初始化。
A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数答案:C分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作;4:下列表达方式正确的是()。
A.class P{ B. class P{public: public:int x=15; int x;void show(){cout<<x;} void show(){cout<<x;}}; }C. class P{ D. class P{int f; public:}; int a;f=25; void Seta (int x) {a=x;}答案:D分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。
5:拷贝构造函数具有的下列特点中,()是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B.拷贝构造函数只有一个参数,并且是该类对象的引用C.拷贝构造函数是一种成员函数D.拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。
实验5:Java类与对象一、实验目的(1)使用类来封装对象的属性和功能;(2)掌握Java类的定义。
(3)java对象的使用二、实验任务(1)按要求编写一个Java程序。
(2)按要求完善一个Java程序,编译、运行这个程序,并写出运行结果。
三、实验内容1.编写一个Java程序片断,以定义一个表示学生的类Student。
这个类的属性有“学号”、“班号”、“姓名”、“性别”、“年龄”,方法有“获得学号”、“获得班号”、“获得性别”、“获得姓名”、“获得年龄”、“获得年龄”。
2.为类Student增加一个方法public String toString( ),该方法把Student类的对象的所有属性信息组合成一个字符串以便输出显示。
编写一个Java Application程序,创建Student类的对象,并验证新增加的功能。
class Student{long studentID;int classID;String name;String sex;int age;public Student(long studentID,int classID,String name,String sex,int age){ this.studentID=studentID;this.classID=classID;=name;this.sex=sex;this.age=age;}public long getStudentID(){return studentID;}public int getClassID(){return classID;}public String getName(){return name;}public String getSex(){return sex;}public int getAge(){return age;}public String toString(){return "学号:"+getStudentID()+"\n班号:"+getClassID()+"\n姓名:"+getName()+"\n性别:"+getSex()+"\n年龄:"+getAge();}}public class StudentDemo{public static void main(String[] args){Student s1=new Student(90221,2,"Tom","male",20);System.out.println(s1.toString());}}运行结果:学号:90221班号:2姓名:Tom性别:male年龄:202.程序填空,程序中包含以下内容:一个学生类(Student),包含:属性:学号s_No,姓名s_Name,性别s_Sex,年龄s_Age。
类和对象(2)【实验目的】:1. 掌握类的构造函数和析构函数的使用方法。
2. 掌握类的拷贝构造函数的使用方法。
【实验内容】:1.读以下程序,为下列程序添加注释,并给出程序运行结果。
并解释为什么得到这样的结果。
上机验证你的结果是否正确。
2. 完成下列要求。
1) 读以下程序,为下列程序添加注释,并给出程序运行结果。
并解释为什么得到这样的结果。
上机验证你的结果是否正确。
2) 将Coordinate 类中带有两个参数的构造函数进行修改,在函数体内添加下述语句:cout << “Constructor is called.\n “; 写出程序的运行结果,并解释输出的结果。
3) 按下列要求进行调试:在主函数体内,添加下述语句:Coordinate p4;Coordinate p5(2); 调试程序时会出现什么错误?为什么?如何对已有的构造函数进行适当的修改?4) 经过以上2)和3)步的修改后,结合运行结果分析:创建不同的对象时会调用不同的构造函数。
□Bine 1 udr< i n>・ t 「•豪 nAUflnf Z ・M!|J*(^ 3.(4; Ma 名% DiDniiriitft^tr<public:CDftrdinatfflnlr wl.iftt ・1)>7尸诵魯;詐杠话巧筑X-K.1 ir/; mot << "C-anWriiirtBr i<; callf i d An*1; 、Coord indtc (O OHHTI I imitvCi p) M"托口 构這函魏^Cwr Ji Mt« <) {eflirt <C C r struct or is c »llea\n ,,s}//折玛=比 int Get X( ){r&itur«i u; } lnt GrlYOi 『@f ii y ;y privet*:int » P V P :>sCeinriiinLdi-r;: Coo r flin^i t p( £n<i r rf i n-a t F fi p)*K S P-M ;FP-JI*£0Lkit<C"C*py -irdtiall 足Nt:左MI 3r )Et 『■亡>t<j 『 Is called^n^stfet FldtAf) {CQOTdlMtf p 12沁屛"谓用 穽蚩些1电世文PV21& coardln^if ”"":"弔1裤11|用想1构令1音餐P#聊刊 EDWdinatv ■$-從討忌二疣轴角將良呜造盛竅 Cuurdlndlt! >;Covrdin.ilr 闷7*的;M 丘ff if ■—介/■■-歆卜咗1洁> 牌 cout^C k |ii-(*<<p3 .G ^IX()«*• ,*«JK 3-fi&tV<<«) Vn B,; 亍ct.ru3. 假使在程序中已经声明了类point ,并建立了其对象 pl 和p4。
第1章习题部分答案1. 操作系统的发展分为那几个阶段?解:操作系统的发展经历了三个阶段:操作系统的酝酿阶段、操作系统的形成阶段、操作系统的理论化和标准化阶段。
2. 计算机软件技术开发系统包括那几个阶段?解:计算机软件开发系统的发展经历了四个阶段:机器语言阶段、汇编语言阶段、高级语言阶段、面向对象语言和可视化语言阶段。
3. 计算机软件技术的主要范畴是什么?解:计算机软件技术的主要范畴包括软件工程技术、程序设计技术、软件工具环境技术、系统软件技术、数据库技术、实时软件技术、网络软件技术、与实际工作相关的软件技术等八个领域的内容。
4. 从软件技术的发展现状来看有哪些值得我们注意的问题?解:从软件技术的发展现状来看有以下几个值得我们注意的问题:1)软件危机2)软件技术标准,软件版权和软件价值评估3)软件技术的基础研究。
1第2章习题部分答案1. 什么是软件危机?软件危机的表现有哪些?解:软件开发技术的进步为能满足发展的要求,在软件开发中遇到的问题找不到解决的方法,问题积累起来形成了尖锐的矛盾,导致了软件危机。
2. 软件危机产生的原因是什么?解:造成软件危机的原因是由于软件产品本身的特点以及开发软件的方式、方法、技术和人员引起的。
1)软件规模越来越大,结构越来越复杂。
2)软件开发管理困难而复杂。
3)软件开发费用不断增加。
4)软件开发技术落后。
5)生产方式落后。
6)开发工具落后,生产率提高缓慢。
3. 常见的软件过程模型有哪些?解:常见的软件过程模型有瀑布模型、增量模型、演化过程模型、敏捷开发4. 如何对软件质量进行评价?解:软件质量的评价主要围绕可维护性、可靠性、可理解性和效率这几个方面进行。
2第3章习题部分答案1. 软件可行性研究的目的是什么?软件可行性研究的任务又是什么?解:软件可行性研究的目的就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。
可行性研究的任务首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,把他们清楚地列举出来。
UML面向对象分析与设计教程课后习题答案选择题第一章(1) 对象程序的基本特征是(ABCD)A.抽象B.封装C.继承D。
多态(2)类包含的要素有(ABC)A.名字B。
属性 C.操作D。
编号(3)下列关于类与对象的关系说法不正确的是(A)A.有些对象是不能被抽象成类的B。
类给出了属于该类的全部对象的抽象定义C.类是对象集合的再抽象D.类是用来在内存中开辟一个数据区,存储新对象的属性(4)面向对象方法中的(C)机制给予子类可以自动的拥有(复制)父类全部属性和操作.A。
抽象B。
封装C。
继承D。
多态(5)建立对象的动态模型一般包含的步骤有(ABCD)A。
准备脚本B。
确定事件C.准备事件跟踪表D.构造状态图第二章⑴UML中的关系元素包括(ABCD).A.依赖B。
关联C.泛化D。
实现⑵在UML中,定义了面向对象的事物,这些事物分为(ABCD).。
A。
结构事物B。
行为事物C。
分组事物D.注释事物⑶UML中的图包括(ABC)。
A.用例图B。
类图C。
状态图D。
流程图⑷UML的视图不包括(BCD).A.用例视图B。
类视图C。
状态视图D。
物理视图⑸下面不属于UML中的静态视图的是(ABC).A. 状态图B.用例图C.对象图D. 类图第三章(1)下列说法正确的是(ACD)A.在用例视图下可以创建类图B.在逻辑视图下可以创建构件图C.在逻辑视图下可以创建包D.在构件视图下可以创建构件(2)在Rational Rose 的逻辑视图下可以创建(ABCD) A.类图 B.构件图C.包 D.活动图(3)Rational Rose 建模工具可以执行的任务有(ABCD) A.非一致性检查 B.生成C++语言代码C.报告功能 D.审查功能(4)Rational Rose 中支持的视图不包括(D)A.逻辑视图 B.构件视图C.部署视图D。
机构视图(5)在构建视图下的元素可以包括(ABC)A.构件 B.构件图C.包 D.类第四章(1)类中的方法的可见性包括(ABC)A.privateB.publicC.protectedD.abstract(2)下面属于UML中类元的类型的是(ABCD)A.类B.对象C.构件D.接口(3)类之间的关系包括(ABCD)A.泛化B.关联C.实现D.依赖(4)下列关于接口的关系说法正确的是(ABCD)?A.接口是一种特殊的类B.所有接口都是有构造型<<interface>〉的类C.一个类可以通过实现接口从而支持接口所指定的行为D.在程序运行的时候,其他对象可以不仅需要依赖与此接口,还需要知道该类对接口实现的其他信息(5)下列关于类方法的声明正确的是(AB)A.方法定义了类所许可的行为B.从一个类所创建的所有对象可以使用同一组属性和方法C.每个方法应该有一个参数D.如果在同一个类中定义了类似的操作,则他们的行为应该是类似的第五章1.在Rational Rose 2003中,支持(ABCD)的构造模型A。
《UML系统建模基础教程(第3版)》课后习题习题 1填空题:(1)______是⾯向对象技术领域内占主导地位的标准建模语⾔,它统⼀了过去相互独⽴的数⼗种⾯向对象的建模语⾔共同存在的局⾯,形成了⼀个统⼀的、公共的、具有⼴泛适⽤性的建模语⾔。
(2)类的定义要包含_____、_____、_____要素。
(3)⾯向对象程序的三⼤要素是_____、_____和_____。
(4)⾯向对象⽅法中的_____机制使⼦类可以⾃动地拥有(复制)⽗类全部属性和操作。
(5)⾯向对象⽅法中系统分析要确定地3个系统模型是_____、_____和_____。
选择题:(1)如果想对⼀个类的意义进⾏描述,那么应该采⽤_____。
A. 标记值B. 规格描述C. 注释D. 构造型(2)建⽴对象的动态模型的步骤有_____。
A. 准备脚本B. 确定事件C. 构造状态图D. 准备事件跟踪表(3)软件的开发模式有_____。
A. 瀑布模型B. XP开发模型C. 喷泉模型D. 构建开发模型(4)下列关于类与对象的关系说法正确的是_____。
A. 有些对象是不能被抽象成类的B. 类给出了属于该类的全部对象的抽象定义C. 类是对象集合的再抽象D. 类是⽤来在内存中开辟⼀个数据区,存储新对象的属性(5)_____模型的缺点是缺乏灵活性,特别是⽆法解决软件需求不明确或不准确的问题。
A. 瀑布模型B. 增量模型C. 原型模型D. 螺旋模型(1)UML(2)名字 属性 操作(3)封装 继承 多态(4)继承(5)对象模型 功能模型 动态模型选择题:(1)C(2)ABCD(3)ABCD(4)BCD(5)A习题 2填空题:(1)UML中主要包含4种关系,分别是_____、_____、_____、_____。
(2)从可视化的⾓度来对UML的概念和模型进⾏划分,可将UML的概念和模型划分为_____、_____、_____。
(3)物理视图包含两种视图,分别是_____、_____。
java类与对象练习题一、题目描述在学习Java类与对象的过程中,通过练习题可以更好地巩固所学知识。
本文将提供一些Java类与对象的练习题,帮助读者进一步理解和应用相关概念。
二、题目一:汽车类请设计一个名为"Car"的Java类,该类具有以下属性和方法:属性:- 品牌(brand):字符串类型- 颜色(color):字符串类型- 速度(speed):整数类型方法:- 启动(start):输出"Car is starting."- 加速(accelerate):将速度增加10,并输出"Speed increase 10."- 减速(decelerate):将速度减少5,并输出"Speed decrease 5."- 停止(stop):输出"Car is stopped."请在"Car"类的构造方法中初始化品牌、颜色和速度,并编写主程序测试该类。
三、题目二:手机类请设计一个名为"Phone"的Java类,该类具有以下属性和方法:属性:- 品牌(brand):字符串类型- 型号(model):字符串类型- 价格(price):浮点数类型方法:- 打电话(call):输入一个手机号码,输出"Calling xxx."(其中xxx是输入的手机号码)- 发短信(sendMessage):输入一个手机号码和短信内容,输出"Sending message to xxx: 【短信内容】."(其中xxx是输入的手机号码,【短信内容】是输入的短信内容)- 展示信息(display):输出手机的品牌、型号和价格请在"Phone"类的构造方法中初始化品牌、型号和价格,并编写主程序测试该类。
四、题目三:学生类请设计一个名为"Student"的Java类,该类具有以下属性和方法:属性:- 姓名(name):字符串类型- 学号(studentId):字符串类型- 年龄(age):整数类型- 成绩(score):浮点数类型方法:- 自我介绍(introduce):输出"大家好,我是XXX,今年YYY岁,学号为ZZZ,平时成绩优秀,希望与大家相处愉快!"(其中XXX为姓名,YYY为年龄,ZZZ为学号)- 考试成绩(exam):输入一个考试分数,将其赋值给成绩属性,并输出"我的考试分数是:XXX."(其中XXX为输入的考试分数)- 获奖(award):输入一个奖项名称,输出"恭喜我获得了XXX奖!"(其中XXX为输入的奖项名称)请在"Student"类的构造方法中初始化姓名、学号、年龄和成绩,并编写主程序测试该类。
第一章C++基础知识习题1第一章C++基础知识习题判断下列标识符的合法性。
sin book 5arry _name main$1 class_cpp a3 x*y my name答:合法的:sin book _name main class_cpp a3非法的:5arry $1 x*y my name假定有下列变量:int a=3,b=5,c=0;float x=,y=,z=;char ch1=’a’,ch2=’5’,ch3=’0’,ch4;求下列表达式的值,以及运算后表达式所涉及的各变量的值。
x+(int)y%a x=z*b++,b=b*x,b++ ch4=ch3-ch2+ch1int(y/z)+(int)y/(int)z !(a>b)&&c&&(x*=y)&&b++ch3||(b+=a*c)||c++ z=(a<<2)/(b>>1)答:x+(int)y%a 表达式值为:,运算后x、y、a的值不变,仍分别为、、3。
提示:运算时取出y变量的数值强制转化为整型数放入寄存器参加运算,但内存中y 本身的数值不变化。
只有赋值运算和自增、自减运算才改变变量本身的值x=z*b++,b=b*x,b++ 表达式值为:42,运算后x为,b为43。
提示:逗号表达式,依次运算,表达式的值是最后一次运算的值。
后++是变量先参加运算然后变量自身加1,所以第1步x等于*5,即,然后b增为6;第2步b赋值为42;第3步,表达式的值是上一步后b的值42,但随后b的值自增1,成为43。
ch4=ch3-ch2+ch1 表达式值为:’\\’,字符外斜杠。
运算后ch1、ch2、ch3值不变。
提示:字符型的变量实质是范围很小的整型量。
int(y/z)+(int)y/(int)z 表达式值为:13。
y和z自身的值不变。
提示:int(y/z)是完成实数除法后,商强制转化为整型,(int)y/(int)z则是数值先转换,完成的是整除。
C++程序设计与应用基础第二章类和对象习题答案1、请完成下列填空题1)在C语言中,编程的单位是___函数__:在C++语言中,编程的单位是____类__。
2)在下面程序的横线处填上适当的语句,使类型该程序执行结果为10。
#include <iostream.h>class MyClass{pub1ic:——MyClass(int a){x=a;}//为x置值——int GetNum(){return x;} //取x值private:int x;};void main(){Myclass my(10);Cout<<my.GetNum()<<end;}3)在类中定义和实现的函数称为__内联函数_______。
4)对类中的成员函数和属性的访问是通过___public___、___protected___和___private___这3个关键字来控制的。
5) ___new___运算符对指定类型对象动态分配内存并返回该类型的__指针___。
6)假定用户没有给一个名为MyClass的类定义构造函数,则系统对其定义的默认构造函数形式为___MyClass()_____。
2、编程题1)定义一个复数类imaginary。
用友元函数实现该类的加、减、乘和除运算。
答案:class Imaginary{public:Imaginary(float a,float b);friend Imaginary Add(Imaginary& img1,Imaginary& img2);friend Imaginary Sub(Imaginary& img1,Imaginary& img2);friend Imaginary Mul(Imaginary& img1,Imaginary& img2);friend Imaginary Div(Imaginary& img1,Imaginary& img2);private:float x,y;};Imaginary::Imaginary(float a,float b){x=a;y=b;}Imaginary Add(Imaginary& img1,Imaginary& img2) {float a,b;a=img1.x+img2.x;b=img1.y+img2.y;return Imaginary(a,b);}Imaginary Sub(Imaginary& img1,Imaginary& img2) {float a,b;a=img1.x-img2.x;b=img1.y-img2.y;return Imaginary(a,b);}Imaginary Mul(Imaginary& img1,Imaginary& img2) {float a,b;a=img1.x*img2.x-img1.y*img2.y;b=img1.x*img2.y+img1.y*img2.x;return Imaginary(a,b);}Imaginary Div(Imaginary& img1,Imaginary& img2) {float a,b;if((img2.x*img2.x+img2.y*img2.y)!=0){a=(img1.x*img2.x+img1.y*img2.y)/(img2.x*img2.x+img2.y*img2.y); b=(img1.y*img2.x-img1.x*img2.y)/(img2.x*img2.x+img2.y*img2.y); return Imaginary(a,b);}elsereturn Imaginary(0.0,0.0);}2)定义类Rational。