您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 面向对象程序设计答案
2018-2019学年第一学期毕业考试《面向对象程序设计》大作业一、简答题(每小题6分,共30分)1、面向过程思想的优点是什么?与人类思维习惯一致;稳定性好:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定;可重用性好;可维护性好2、比较Java和C++?JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语言使用者,从而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,摒弃了其他语言的不足之处,从根本上解决了c++的固有缺陷。用C++可以使用纯过程化的编程,也可以是基于对象的编程,还可以是面向对象的编程,当然大部分是混合编程,c++可以跨平台3、重载的意义?运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。4、抽象类的作用和意义?抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用abstract修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色2018-2019学年第一学期毕业考试《面向对象程序设计》大作业5、多态的意义?1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。二、辩析。可以不说出对错但是要给出评价(每小题8分,共40分)1、任何父类对象都可以被子类对象替代。答:符合里氏替换原则即可、.public修饰符号破坏了数据的开放性。3、private继承方式不能产生子类。答:private方式派生的类不能完成父类的全部功能,所以不能产生子类。4、不能实例化的类一定是抽象类。答:一般来说,具有纯虚函数的类,被称为抽象基类,抽象基类是不能创建抽象类型的对象,而是该类的派生类去进行实例化,如果抽象类的派生类有任何一个纯虚函数没有具体的实现,那么该派生类仍然还是一个抽象类,即还是无法进行实例化对象5、面向对象思想适合解决复杂的问题。面向过程是一种思维方式。当试图通过面向过程解决问题时,我们的关注点在于问题解决的流程,重在这个过程的控制,需要用大量的模块(模块化的思想源自于硬件,在C语言中是函数)将大问题拆解,程序员通过控制模块的执行顺序以解决问题。在日常生活或者说日常编程中,简单的问题用面向过程的思路解决,更加直接有效,但是当问题的规模稍大时,如要描述三万个人吃饭的问题,或者要构建一个航空母舰模型的时候,用面向过程的思想是远远不够的。而且面向过程程序的代码复用性、可扩展性、可移植性、灵活性、健壮性都会在处理大规模问题中出现问题。2018-2019学年第一学期毕业考试《面向对象程序设计》大作业二、综合回答(每小题15分,共30分)1、面向对象程序设计思想的优点和缺点。2、设计一个复数类,实现复数的加、减操作。#includeiostreamusingnamespacestd;classComplex{public:Complex(doublefReal=0.0,doublefImag=0.0):m_fReal(fReal),m_fImag(fImag){}public:doubleGetReal(void)const{returnm_fReal;}doubleGetImag(void)const{returnm_fImag;}public:voidSetReal(doublefReal){m_fReal=fReal;}voidSetImag(doublefImag){m_fImag=fImag;}public:voidPrint(void){cout[m_fReal+m_fImagi]endl;}/////////////////////////////////////////////////////////////////////public:2018-2019学年第一学期毕业考试《面向对象程序设计》大作业//重载运算符前++,实部,虚部各加1Complex&operator++(void){++m_fReal;++m_fImag;return*this;}//重载运算符后++,实部,虚部各加1//加const修饰,使得编译时就报错,避免对后++的连续使用constComplexoperator++(int){Complexold=*this;m_fReal++;m_fImag++;returnold;}public:Complexoperator-(void){returnComplex(-m_fReal,-m_fImag);}public:Complexoperator+(constComplex&c){returnComplex(m_fReal+c.m_fReal,m_fImag+c.m_fImag);}Complexoperator-(constComplex&c){returnComplex(m_fReal-c.m_fReal,m_fImag-c.m_fImag);}Complex&operator+=(constComplex&c){m_fReal+=c.m_fReal;m_fImag+=c.m_fImag;return*this;}Complex&operator-=(constComplex&c){m_fReal-=c.m_fReal;m_fImag-=c.m_fImag;return*this;}private:doublem_fReal;2018-2019学年第一学期毕业考试《面向对象程序设计》大作业doublem_fImag;//友元函数放在哪里无所谓,但要在类中声明friendostream&operator(ostream&os,constComplex&c);friendistream&operator(istream&is,Complex&c);};ostream&operator(ostream&os,constComplex&c){/*returnos[c.GetReal()+c.GetImag()i]endl;*/returnos[c.m_fReal+c.m_fImagi]endl;//returnos;}istream&operator(istream&is,Complex&c){returnisc.m_fRealc.m_fImag;}intmain(void){Complexc1(10,10);Complexc2(20,20);coutc1:c1c2:c2;/*c1.Print();c2.Print();cout请输入实部和虚部:;cinc1;coutc1c2endl;*//*coutc1c2;Complexc3=c1+c2;coutc3;Complexc4=c3-c2-c1;coutc4;*//*Complexc3(30,30);coutc3:c3endl;c3+=c2+=c1;coutc1:c1;coutc2:c2;coutc3:c3;*//*Complexc3(30,30);2018-2019学年第一学期毕业考试《面向对象程序设计》大作业coutc3:c3endl;(c3+=c2)+=c1;coutc1:c1;coutc2:c2;coutc3:c3;*///cout-c1:-c1;/*intn=10;cout++++++++nendl;//14//coutn++++++++endl;//错误*/cout++++++c1:++++++c1;coutc2++:c2++;coutc2:c2;//coutc2++++:c2++++;//编译报错return0;}
本文标题:面向对象程序设计答案
链接地址:https://www.777doc.com/doc-5256366 .html