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