还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
第章习题答案名词解释1抽象抽象就是忽略事物中与当前目标无关的非本质特征,而强调与当前目标有关的Abstract本质特征,从而找出事物的共性,并把具有共性的事物划为一类面向对象方法中的抽象,是指对具体问题对象进行概括,抽出一类对象的公共性质并加以描述的过程封装面向对象方法中的封装就是把将抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节消息消息是面向对象程序设计用来描述对象之间通信的机制一个消息就是一个对象要求另一个对象实施某种操作的一个请求填空题面向过程的结构化程序设计方法面向对象程序设计方法1顺序选择循环2程序=数据结构+算法程序二对象+消息3⑷过程类⑸抽象性封装性继承性多态性选择题dB2C3D4C5D6A7A8BC9AD判断题Dt2f3f4f5t6f7f8t简答题1结构化程序设计方法着眼于系统要实现的功能,从系统的输入和输出出发,分析系统要做哪些事情,进而考虑如何做这些事情,自顶向下地对系统的功能进行分解,来建立系统的功能结构和相应的程序模块结构,有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护随着程序规模与复杂性的增长,这种面向过程的结构化程序设计方法存在明显的不足之处首先是数据安全性问题,由于数据被每个模块所共用,因此是不安全的,一旦出错,很难查明原因其次是可维护性及可重用性差,它把数据结构和算法分离为相互独立的实体,一旦数据结构需要改变时,常常要涉及整个程序,修改工作量极大并容易产生新的错误每一种相对于老问题的新方法都要带来额外的开销另外,图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难2面向对象的程序设计方法中,将程序设计为一组相互协作的对象而不是一组相互协作的Object函数在程序中,属性用数据表示,用来描述对象静态特征;行为用程序代码实现,用来描述对象动态特征可见,在面向对象的程序设计方法中,对象是数据结构和算法的封装体对象之间存在各种联系,它们之间通过消息进行通信程序可表示为程序=对象+消息在面向对象程序设计中,它着重于类的设计类正是面向对象语言的基本程序模块,通过类的设计,来完成实体的建模任务类通过一个简单的外部接口,与外界发生关系一个类中的操作不会处理到另一个类中的数据,这样程序模块的独立性、数据的安全性就有了良好的保障程序的执行取决于事件发生的顺序,由顺序产生的消息来驱动程序的执行不必预先确定消息产生的顺序,更符合客观世界的实际并且面向对象程序设计方法提供了软件重用、解决大问题和复杂问题的有效途径,具有抽象性、封装性、继承性和多态性等特点函数重载来实现3重载函数只要求函数有相同的函数名,并且重载函数是在相同作用域中定义的名字相同的不同函数而虚函数不仅要求函数名相同,而且要求函数的签名、返回类型也相同也就是说函数原型必须完全相同,而且虚函数特性必定是体现在基类和派生类的类层次结构中重载函数可以是成员函数或友员函数,而虚函数只能是非静态成员函数构造函数可以重载,析构函数不能重载正好相反,构造函数不能定义为虚函数,析构函数能定义为虚函数重载函数的调用是以所传递参数序列的差别作为调用不同函数的依据而虚函数是根据对象的不同去调用不同类的虚函数重载函数在编译时表现出多态性,是静态联编;而虚函数则在运行时表现出多态性是动态联编,动态联编是的精髓C++4包含有纯虚函数的类称为抽象类抽象类用来描述一组子类的共同的操作接口,它用作基类,而接口的完成实现由派生类提供抽象类的派生类不一定要给出纯虚函数的实现如果没有在派生类中给出纯虚函数的实现中,则需仍将它说明为纯虚函数,否则编译器将给出错误信息说明了纯虚函数的派生类仍是抽象类5能声明虚析构函数如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数运算符和析构函数一起工作,当使用删除一个对象时,隐delete deletedelete含着对析构函数的一次调用,如果析构函数为虚函数,则这个调用采用动态联编这样保证了基类类型的指针能够调用适当的析构函数针对不同的对象进行清理工作程序设计题2//xt5_
2.cpp〃应用实例#include iostream#include stringusing namespace std;class Shapepublic:Shape;void show;{}virtual〜Shapevirtual float area=0;virtual string shapename=O;protected:string name;static intcount;;Shape::Shape请输入”;coutvv”count=count+l;void Shape::show第个图形是cout countv”shapename;cout«n,面积为areaendl;float totalShape*s[],int nfloat sum=0;forint i=0;in;i++sum+=s[i]-area;delete s[i|;return sum;class Triangle:public Shapepublic:Triangle;-Triangle{cout«HTriangle destructoris calledn«endl;}float area{return h*w*
0.5;}三角形;string shapename{name=return name;}protected:float h,w;;Triangle::Trianglefloat myw,float myh;三角形的底和高”;cout«cin»myw»myh;w=myw;h=myh;}class Rectangle:public Shapepublic:Rectangle;-Rectangle{cout«HRectangle destructoris calledH«endl;}float area{return l*w;}矩形;string shapename{name=return name;}protected:float1,w;;Rectangle::Rectanglefloat myl,float myw;矩形的长和宽”;coutvv”cin»myl»myw;l=myl;w=myw;}class Circle:public Shape{protected:float radius;public:Circle;-Circle{cout«nCircle destructoris calledn«endl;}float area{return radius*radius*
3.14;}stringshapename{name=H HIn;retum name;};Circle::Circlefloat r;”圆的半径”;coutcin»r;radius=r;}int Shape::count=0;int mainShape*s|4];s
[0]=new TriangleQ;s
[0]-show;s[l]=new Rectangle;s[l]-show;s
[2]=new Circle;s|2]-show;s
[3]=new Circle;s
[3]-show;float sum=totals,4;〈”上述图形的面积和为”;coutcout«sum«endl;return0;第章习题答案6填空题⑴函数2非静态成员函数友员函数⑶少对象的引用4整型5多6选择题3A4C⑴B2C判断题3t4f⑴t2f操作题提示Q需要声明如下形式带默认值的构造函数:fractionint x=O,int y=l;需要定义一个成员函数去优化分数,如化简、不让负号在分母处等参考代码如下:voidfraction::optimizationint gcd,min,max;iffenzi==0{〃如分子为则分母为后,返回0,1fenmu=l;return;gcd=absfenziabsfenmuabsfenmu:absfenzi;ifgcd==0return;//以下用辗转相除法求最大公约数ifabsfenziabsfenmumax=fenzi;min=fenmu;elsemin=fenzi;二max fenmu;dogcd=max%min;max=min;min=gcd;}whilegcd!=0;fenzi/=max;fenmu/=max;iffenzi0fenmu0fenzi=-fenzi;fenmu=-fenmu;}elseiffenzi0fenmu0fenzi=fenzi;fenmu=fenmu;elseiffenzi0fenmu0fenzi=fenzi;fenmu=fenmu;iffenzi0fenmu0fenzi=-fenzi;fenmu=-fenmu;提示分数化简后再比较3//第六章例题
6.3#include iostreamusingnamespace std;class complexpublic:complexdouble r=
0.0,double i=
0.0;complex operator+complex c;complex operator-complex c;void display;private:double real,imag;;complex complex::double第章习题答案7名词解释题函数模板一个带类属参数的函数类模板一个带类属参数的类模板函数通过参数实例化可以再构造出具体的函数模板类通过参数实例化可以再构造出具体的类填空题函数模板类模板12template3class typename类属参数类似4没有5类模板6顺序容器关联容器7输入迭代器输出迭代器前向迭代器双向迭代器随机访问迭代器8选择题1A2A3AB4C5ABD判断题⑴t2f3t4f5f程序设计题1xt7_l.cpp2xt7_
2.cpp第章习题答案8填空题流流类1标准输入23cin coutcerr clog4fstream.h类的成员函数使用控制符5ios顺序文件随机读写文件6输入文件流输出文件流输入/输出文件流7一个指定的文件89010read write选择题1B2A3BCD4C5A6C7AB8AD BC9D10B11A12BC13C14C15BCD16C判断题⑴f2t3t4f5t6f简答题1从流类库的基本结构可以看到,类是类和类的基类,从类公有派生ios istreamstream iosistream和两个类,而类通过多重继承类和类而产生的如果不将ostream iostreamistream ostreamios类作为其派生类的虚基类,可能会产生二义性2在文本文件中,每个字节存放一个代码表示一个字符,文本文件的优点是可直接按字符ASCII形式输出,供人们阅读二进制文件则是把数据的内部存储形式原样存放到文件中,这种文件的优点是与数据在内存中的存储形式保持一致,因此存储效率高,无须进行存储形式的转换,但不能直接按字符形式输出对于那些保存中间运算结果的临时工作文件,使用二进制形式较为合理程序分析题输出结果Hello,students!Welcome youto oop!程序设计题参考程序1#include iostream.hclass Fractionpublic:Fractionint x=0,int y=l;friend ostream operator«ostream,Fraction;private:〃分子int den;〃分母int num;;Fraction::Fractionint x,int yden=x;num=y;ostreamoperator«ostream os,Fraction fros«fr.den«7,«fr.num;return os;int mainFractionfenshu2,3;cout«Hfenshu=n«fenshu«endl;return0;第章习题答案9填空题预料避免系统运行环境1将程序立即中断运行,从而无条件释放所有资源2不必3语句块4try异常类型5任何6抛出列表7不抛出89exception newstdexcept10catch选择题至少选一个,可以多选1AC2B3D4CD判断题Dt2f3f4f5f6f7t8t简答题1异常处理是一种程序定义的错误,它对程序的逻辑错误进行设防,对运行异常加以控制中,异常处理是对所能预料的运行错误进行处理的一套实现机制C++2的异常处理机制使得异常的引发和处理不必在同一函数中异常处理的目的,是在异C++C++常发生时,尽可能地减小破坏,周密地善后,而不去影响其它部分程序的运行这样底层的函数可以着重解决具体问题,而不必过多地考虑对异常的处理上层调用者可以在适当的位置设计对不同类型异常的处理这在大型程序中是非常必要的程序分析题分析程序,写出程序的输出结果运行结果Enter numberof money:4Enter numberof glasses of milk:24yuan5glassesof milk.You have2yuan foreach glassofmilk.End ofprogram.63结构化程序设计方法中,把数据结构和算法分离为相互独立的实体在面向对象程序设计中,数据结构和算法是封装在一起,结合成一个独立的单位,即对象,并尽可能隐蔽对象的内部细节对象的私有属性只能由这个对象的行为来读取和修改,与外部的联系通过公有行为充当外部接口第章习题答案2名词解释引用所谓引用,就是给对象起一个别名,使用该别名可以存取该对象换句话说,是使新对象和原对象共用一个地址内联函数内联函数是使用关键字声明一个函数inline重载函数重载函数通常用来对具有相似行为而数据类型不同的操作提供一个通用的名称填空题⑴函数类2///*……*/3iostream4cin»5cout«地址值类型值6⑺对象声明8值传递引用传递910inline11new delete12x=10,y=10x=100,y=100选择题⑴A2C3C4A5D6D7D8BC9A10D判断题⑴t2f3f4t5t6t7t8t简答题名字空间用来防止命名的冲突1除了独立引用外,在程序中,引用的主要用途是用作函数参数和函数的返回值2C++在值传递机制中,作为实参的表达式的值被复制到由对应的形参名所标识的一个对象中,作3为形参的初始值函数体对形参的访问、修改都是在这个标识对象上操作,与实参无关,即数据的传递是单向的使用引用作函数的形参时,调用函数的实参要用变量名实参传递给形参,相当于在被调用函数中使用了实参的别名于是,在被调用函数中对形参的操作,实质是对实参的直接操作,即数据的传递是双向的内联函数是使用关键字声明一个函数在程序编译时,编译系统将程序中出现内联函4inline数调用的地方用函数体进行替换,进而减少了时间开销使用内联函数应注意递归函数不能定义为内联函数内联函数一般适合于不含有和等复杂的结构且只有条语句的小函数,否则switch while1〜5编译系统将该函数视为普通函数内联函数只能先定义后使用,否则编译系统也将该函数视为普通函数对内联函数也不能进行异常接口声明不必一致所有的参数是根据位置和类型而不是名字来区分的5编译系统将根据函数参数的类型和个数来判断使用哪一个函数6程序分析题写出程序的输出结果,并分析结果程序的输出结果num=60ref=100程序设计题//xiti2_l.cpp#include iostream#include cmathusingnamespace std;int mainfloatx,y;cout«nplease input2floats tox,y:H«endl;cin»x»y;float z=powx,y;cout«npown«x«,,,,yn-,,z«endl;return0;第章习题答案3填空题⑴公有保护私有private pubic⑵作用域MyClass⑶样板实例⑷1151delete数据区代码区栈区堆区封装性静态成员任意访问权限许可的友元函数友元类效率;选择题12friend A⑴B2BC3C4C5B DB6C7B8B9AC10D11C12C13B14B简答题15B16D17C18CD19D20A21A22D23C1类实际上由一个类定义的类型称为类类型,程序员可以使用这个新类型在程序中声明新的变量,OnHz1\1z/\6/V7z\8zv9z-\\z\7\17\lz\lz\7具有类类型的变量称为对象创建对象时,类被用作样板,对象称为类的实例2定义类一般形式为类名{classpublic〈公有数据和函数,protected<保护数据和函数,private〈私有数据和函数〉;访问权限共有三种分别是公有>保护和私有的public protectedprivate3指创建类的对象4指针是为成员函数提供的一个隐含对象指针,它不能被显式声明指针是一个局this C++this部量,局部于某个对象不同的对象调用同一个成员函数时,编译器根据指针来确定应该this引用哪一个对象的数据成员5拷贝构造函数是一种特殊的构造函数,它的作用是用一个已经存在的对象去初始化另一个对象时为了保证所引用的对象不被修改,通常把引用参数声明为参数const在以下种情况下,拷贝构造函数都会被自动调用3
①当用类的一个对象去初始化该类的另一个对象时
②当函数的形参是类的对象,进行形参和实参结合时
③当函数的返回值是类的对象,函数执行完成返回调用者时程序分析题1Init defaInitdefaInit152Exit maindst53Default constructorof PartConstructorof Part,3Default constructorof PartConstructorof WholeDestructor of WholeDestructor of Part,0DestructorofPart,3DestructorofPart,0430程序设计题1//xiti3_l.cpp#includeiostream usingnamespace std;class Circlepublic:Circlefloat r{radius=r;}〜Circle{}floatarea{return
3.14*radius*radius;}private:float radius;;int mainfloatr;“请输入圆的半径”;cout«cin»r;Circle pr;“半径为”“的圆的面积为“cout««r««p.area«endl;return0;2//xiti3_
2.cpp#include iostreamusingnamespace std;class Bookpublic:Bookint w;static intsumnum;static intgetsum{return sumnum;}private:int num;;Book::Bookint wnum=w;sumnum-=w;int Book::sumnum=120;int mainBook bl20;Bookb270;cout«Book::getsum«endl;return0;第章习题答案4填空题⑴基派生单继承多继承2私有继承方式3⑷公有保护⑸多继承支配规则6解决二义性7使用作用域运算符选择8引进虚基类题1B2CD3ABC4C5A6C7B8D9AD10A判断题简答题4t5f6f1f2t3f1面向对象技术中,类是数据和操作的集合,它们之间有种主要关系和3Has-A,Uses-A Is-Ao表示类的包含关系,用以描述一个类由多个“部件类”构成在面向对象技术中,实Has-A现关系用类成员表示has-A表示一个类部分地使用另一个类在面向对象技术中,这种关系通过类之间成员函数的Uses-A相互联系或对象参数传递实现另外,通过定义友员也能实现这种关系表示一种分类方式,描述类的抽象和层次关系继承可以表达关系Is-A is-A2所谓赋值兼容规则是指在公有继承情况下,一个派生类的对象可以作为基类的对象来使用的地方具体来说,就是下面种情况3派生类的对象可以赋给基类的对象1派生类的对象可以初始化基类的引用2派生类的对象的地址可以赋给指向基类的指针33当类的继承方式为公有继承时,在派生类中,基类的公有成员和保护成员被继承后分别作为派生类的公有成员和保护成员,这样使得派生类的成员函数可以直接访问它们,而派生类成员函数无法直接访问基类的私有成员在类外部,派生类的对象可以访问继承下来的基类公有成员当类的继承方式为私有继承时,在派生类中,基类的公有成员和保护成员作为派生类的私有成员,派生类的成员函数可以直接访问它们,而派生类的成员函数无法直接访问基类的私有成员在类外部,派生类的对象无法访问基类的所有成员当类的继承方式为保护继承时,在派生类中,基类的公有成员和保护成员作为派生类的保护成员,派生类的成员函数可以直接访问它们,而派生类的成员函数无法直接访问基类的私有成员在类外部,派生类的对象无法访问基类的所有成员4首先基类构造函数被调用,子对象所在类构造函数次之,最后执行派生类构造函数5若派生类有构造函数而基类没有,当创建派生类的对象时,派生类的相应构造函数被自动调用若派生类没有构造函数而基类有,则基类必须拥有缺省构造函数只有这样,当创建派生类的对象时,才能自动执行基类的默认构造函数若派生类有构造函数,且基类有缺省构造函数,则创建派生类的对象时,基类的缺省构造函数会自动执行,除非当前被调用的派生类构造函数在其初始化段中显式地调用了基类的有参构造函数若派生类和基类都有构造函数,但基类没有缺省构造函数,则派生类的每一个构造函数必须在其初始化列表中显式地调用基类的某个构造函数只有这样,当创建派生类的对象时,基类的构造函数才能获得执行机会程序分析题HJ226,2915,1626,29程序设计题//xiti4_l.cpp#includeiostream.h〃定义基类class Pointprotected:int x,y;public:Pointint myx,int myy{x=myx;y=myy;}void displayxyOcout«nThe postionof point:1;cout«n,«x«,V,«y«n,,«endl;;〃定义派生类,公有继承方式class Rectangle:public Pointprivate:int l,w;public:Rectangleint myx,int myy,int myl,int myw:Pointmyx,myy{I=myl;w=myw;}void displaylwcout«nThe lengthand widthof rectangle:n;cout«l«n,nw«endl;;〃定义派生类,公有继承方式class Cube:public Rectangleprivate:int h;public:Cubeint myx,int myy,int myl,int myw,int myh:Rectanglemyx,myy,myl,myw{h=myh;};void displayh{cout«The heightof cube:«h«endl;}void main//派生类对象Cube v20,40,3,5,6;cout«The dataof cube:H«endl;v.displayxy;v.displaylw;v.displayhQ;//第四章例题
4.16#include iostreamusingnamespacestd;class pointpublic:pointint myx,int myy{x=myx;y=myy;}void displayxyOcout«nthe positionof center:;cout«nn«x«u;«,,,,«endl;protected:int x,y;;class circle:public pointpublic:circleint myx,int myy,int myr:pointmyx,myy{r=myr;}void displayr{cout«nthe radiusof circle:H«r«endl;}private:int r;;class cylinder:public circlepublic:cylinderint myx,int myy,int myr,int myh:circlemyx,nyy,myr{h=myh;}void displayh{cout«Hthe heightof cylinder:H«h«endl;}private:int h;;int maincylinderv4,5,6,8;cout«Hthe dataof cylinder:n«endl;v.displayxy;v.displayr;v.displayhQ;return0;第章习题答案5填空题⑴静态动态编译时的多态性,运行时的多态性2⑶静态动态覆盖4使用了不恰当的虚函数5静态670⑻抽象类选择题1A1D2BD3B4AB5B6C7CD8BD判断题⑴f2f3t4f5f6t简答题1多态性就是同一符号或名字在不同情况下具有不同解释的现象,即是指同一个函数的多种形态支持两种多态性,编译时的多态性和运行时的多态性C++多态性有两种表现形式一种是不同的对象在收到相同的消息时,产生不同的动作,这主要通过虚函数来实现;另一种是同一对象收到相同的消息却产生不同的函数调用,这主要通过。