




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
;.C+面向对象程序设计复习试题类型 1、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。15题,每小题2分,共30分) 主要从作业题目中抽出来2. 填空题。(10题,每小题3分,共30分)3、阅读程序,写出程序运行结果。【也称计算题】( 3题,每小题5分,共15分)4、程序编制题【也称综合分析题】。 (第1、2题每题8分,第3题9分,共25分) 重点复习内容打*号是重点,打号是编程题出题范围* 基本概念,对象,消息,类。面向对象系统特性,封装性,继承性,多态性。* C+类的构成,类与对象,构造与析构,动态存储,类嵌套。静态成员,对象数组,友元。*函数重载。运算符重载。*引用定义与引用参数* 基类与派生类的定义。* 基类及派生类的访问权(含派生类对基类的访问、通过派生类对象对基类的访问)和初始化。多继承与虚基类。*多态性与虚函数。纯虚函数、抽象类。*函数模板。*使用类来定义对象并在程序中的应用 题型样题填空题 1. 假定AB为一个类,则执行“AB a10;”语句时,系统自动调用该类的构造函数的次数为_。 答案:10 2.可以用p.a的形式访问派生类对象P的基类成员a,其中a是_。 答案:公有继承的公有成员 3.能作为重载函数的调用的依据是_。 答案:参数个数 、参数类型 4.在进行完任何C+流的操作后,都可以用C+流的有关成员函数检测流的状态;其中只能用于检测输入流是否结束状态的操作函数名称是_ 答案:eof 5.函数重载是指_。 答案:两个或两个以上的函数取相同的函数名,但形参的个数或类型不同 6.在派生类中重新定义虚函数时必须在 _ 方面与基类保持一致。 答案:参数个数 阅读程序例题【计算题】1分析以下程序的执行结果 #include class Sample int x,y; public: Sample() x=y=0; Sample(int a,int b) x=a;y=b; Sample() if(x=y) cout“x=y”endl; else cout“x!=y”endl; void disp() cout“x=”x“,y”=yendl; ; void main() Sample s1,s2(2,3); s1.disp(); s2.disp(); 解: x=0,y=0 x=2,y=3 x!=y x=y2.分析以下程序的执行结果 #include int add(int x,int y) return x+y; int add(int x,int y,int z) return x+y+z; void main() int a=4,b=6,c=10; coutadd(a,b),add(a,b,c)endl; 解: 10,20 3.分析以下程序执行结果 #include int add(int x,int y) return x+y; double add(double x,double y) return x+y; void main() int a=4,b=6; double c=2.6,d=7.4; coutadd(a,b),add(c,d)endl; 解: 10,10 4.分析以下程序执行的结果 #include class Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() coutx=x,y=yendl; ; void main() Sample s1,s2(1,2),s3(10,20); Sample *pa3=&s1,&s2,&s3; for(int i=0;idisp(); 解: x=0,y=0 x=1,y=2 x=10,y=20 5. 分析以下程序的执行结果: #include class base int n; public: base(); base (int a) cout constructing base class endl; n=a; cout n= n endl; base() cout destructing base class endl; ; class subs : public base int m; public: subs(int a, int b) : base(a) cout constructing sub class endl; m=b; cout m= m endl; subs() cout destructing sub class endl; ; void main () subs s(1,2); 解: constructing base classn= 1constructing sub classm= 2destructing sub classdestructing base class 6.分析以下程序的执行结果: #include class Sample protected: int x; public: Sample() x=0; Sample(int val) x=val; void operator+() x+; ; class Derived:public Sample int y; public: Derived():Sample() y=0; Derived(int val1,int val2):Sample(val1) y=val2; void operator-() x-;y-; void disp() coutx= x ,y= y endl; ; void main () Derived d(3,5); d.disp(); d+; d.disp (); d-; d-; d.disp(); 解: x=3,y=5x=4,y=5x=2,y=3 7 分析以下程序执行结果: #include class A public: A(char *s) cout s endl; A() ; class B:public A public: B(char *sl,char *s2) :A(sl) cout s2 endl; ; class C:public A public: C(char *sl,char *s2) :A(sl) cout s2 endl; ; class D:public B,public C public: D(char *sl,char *s2,char *s3,char *s4) :B(sl,s2),C(sl,s3) cout s4 endl; ;void main () D d(class A,class B,class C,class D); 解: class A class B class A class C class D 补充例题1.分析以下程序的执行结果 #include template T max(T x,T y) return (xy?x:y); void main() coutmax(2,5)“,”max(3.5,2.8)endl; 解答:5,3.5 2分析以下程序的执行结果 #include void main() int a=10,20,30,40,*pa=a; int *&pb=pa; pb+; cout*paendl; 解答:输出为:20 3.分析以下程序的执行结果 #include template T abs(T x) return (x0?x:-x); void main() coutabs(-3)“,”abs(-2.6)endl; 解答:输出为:3,2.6 4.分析以下程序的执行结果 #include class Sample char c1,c2; public: Sample(char a)c2=(c1=a)-32; void disp() coutc1“转换为”c2endl; ; void main() Sample a(a),b(b); a.disp(); b.disp(); 解答:a转换为A b转换为B 5.分析以下程序的执行结果 #include void main() int a; int &b=a; / 变量引用 b=10; cout“a=”aendl; 解答:输出为:a=10 6.分析以下程序的执行结果 #include class Sample int x; public: Sample(); Sample(int a)x=a; Sample(Sample &a)x=a.x+ +10; void disp()cout“x=”xendl; ; void main() Sample s1(2),s2(s1); s1.disp(); s2.disp(); 解答:x=3 / +运算的结果 x=12 / 2+10 7.分析以下程序的执行结果 #include class Sample int x; public: Sample(); Sample(int a)x=a; Sample(Sample &a)x=a.x+1; void disp()cout“x=”xendl; ; void main() Sample s1(2),s2(s1); s2.disp(); 解答:输出为:x=3。 程序编制题例题【综合分析题】例1,写出一个梯形类,操作有求面积和周长分析:由于要求梯形的面积和周长,那就要为梯形提供上底,下底,高,左边长,右边长等属性。因此,梯形类描述为:Class echelon Int top,bottom,height,llength,rlength; Public: Echelon( ) 。 /构造函数 Int Area( ) 。 /求面积 Int Perimeter( ) 。 /求周长 2. 设计一个圆类circle和一个桌子类table,另设计一个圆桌类roundtable,它是从前两个类派生的,要求输出一个圆桌的高度、面积和颜色等数据。 解: circle类包含私有数据成员radius和求圆面积的成员函数getarea();table类包含私有数据成员height和返回高度的成员函数getheight()。roundtable类继承所有上述类的数据成员和成员函数,添加了私有数据成员color和相应的成员函数。本题程序如下: #include #include class circle double radius; public: circle(double r) radius=r; double getarea() return radius*radius*3.14; ; class table double height; public: table(double h) height=h; double getheight() return height; ; class roundtable : public table,public circle char *color; public: roundtable(double h, double r, char c) : circle (r) , table (h) color=new charstrlen(c)+1; strcpy (color, c); char *getcolor() return color; ; void main() roundtable rt(0.8,1.2,黑色); cout 圆桌属性数据: endl; cout 高度: rt.getheight() 米 endl; cout 面积: rt.getarea() 平方米 endl; cout 颜色: rt.getcolor() endl; 3.编写程序,定义一个类test,其成员数据及函数要求如下:(1)私有数据成员int data(2)构造函数两个test () 及test(int d),前者将()中的数据成员data值设为0;后者将()中的数据成员data设定为指定值d(3)成员函数int setdate()能在键盘读入一个数值,然后将该数值赋给data 4.定义一个抽象类tea代表茶叶,它有个double类型的保护数据成员cost代表种植成本,它还有一个纯虚函数price用来计算售价:double price(void)函数返回值为茶叶的售价。由tea派生出具体类blacktea(红茶),要求如下:(1)类中定义保护成员数据double o_cost,表示红茶的经营成本(2)定义构造函数blacktea(double btc,double bto_c),将cost 和o_cost,数据成员设定为指定值(3)重载price计算出blacktea 的售价。(假设:blacktea 售价 =(cost + o_cost)*1.2)5.编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。 分析: 设计一个学生类Stud,除了包括no(学号)、name(姓名)和deg(成绩)数据成员外,有两个静态变量sum和num,分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,另有一个静态成员函数avg(),它用于计算平均分。在main()函数中定义了一个对象数组用于存储输入的学生数据。 本题程序如下: #include #include #define N 3 class Stud int no; char name10; int deg; static int num; static int sum; public: void setdata(int n,char na,int d) no=n; deg=d; strcpy(name,na); sum+=d; num+; static double avg() return sum/num; void disp() printf( %-5d%-8s%3dn,no,name,deg); ; int Stud:sum=0; int Stud:num=0; void main() Stud stN; int i,n,d; char na10; for(i=0;iN;i+) printf(输入学号 姓名 成绩:); scanf(%d%s%d,&n,na,&d); sti.setdata(n,na,d); printf(输出数据n); printf( 学号 姓名 成绩n); for(i=0;i、.下标运算符: 括弧运算符: ( )动态存储运算符:new、delete注意在一个表达式中运算符的优先级。其中尤其要注意+、-、-、.、*、&、=运算符。4、C或C+语句五种语句: 表达式语句: 例如: y=x*3+4;空语句:;控制语句: 例如: break; if ( * ) else函数调用语句: 例如: printf( * );复合语句: 例如: x=9+y*5; cout成员变量在C+中结构是类的一种特例,也可以有成员函数,但它与类不同,它的成员缺省时是公有的。二、面向对象的程序设计1、类与对象的概念类是一种自定义类型,是对一类对象的抽象,是对象的模板。对象是一个实体,是类的实例,对象由类建立,对象封装了数据和对数据操作的函数,有一个边界,从外部对对象私有部分的访问是被禁止的,对对象的操作要通过它对外的公共接口(公有区)进行。同类对象有相同的成员函数,相同的数据成员集合,但名字不同,数据成员的值也不一定相同(即对象的状态不同)。对象的数据成员又叫对象的属性,对象的成员函数又叫对象的方法,调用对象的方法叫向对象发送消息。对象之间靠消息联系。面向对象的程序设计就是向未知对象发送消息的程序设计,面向对象的程序就是一组通信的对象。2、类的声明class 类名:public 基类1名,public 基类2名,private:类的私有成员,从对象外部不能访问,它的派生类也不能访问,只能它自己访问。protected:类的保护成员,从对象外部不能访问,它的派生类和它自己可以访问。public:类的公有成员,对外公开的、可以任意访问的成员。;成员变量的声明:在类的中象普通变量一样进行声明,但不能赋初值。成员变量在对象中是这个对象的所有成员函数的全局变量。成员函数的声明:在类的中先声明函数的原形,再在类的之外:返回类型 类名:函数名(参数类型 形式参数名,) 函数体 3、对象定义与使用直接定义对象: 类名 对象名(构造函数实际参数);通过定义类指针定义对象: 类名 *指针名; 指针名=new 类名(构造函数实际参数);通过定义类指针定义的对象需要用删除: delete 指针名;直接定义对象数组: 类名 数组名数组元素个数;在定义对象数组时初始化数组:类名 数组名数组元素个数=类名(构造参数),;通过类指针定义数组: 指针名=new 类名数组元素个数;通过类指针定义对象数组不能调用带参数的构造函数对数组进行初始化。通过类指针定义的数组的删除: deltet 指针名;使用对象成员:直接定义的对象: 对象名.成员名通过指针定义的对象: 指针名-成员名一维对象数组元素的访问: 数组名下标.成员名 或 (*(数组名+下标).成员名 指针名下标.成员名 或 (*(指针名+下标).成员名每个对象都有一个指向自己的常数指针,即this指针。在计算机中所有同类对象有不同的数据成员,但是只有共同的一组成员函数,成员函数靠this指针来识别是来自哪一个对象的调用。同类对象可以相互赋值。对象间赋值缺省是对应成员的赋值,成员中有指针时通常需要重载赋值号 = 。普通类型变量向对象赋值时会自动调用相应的构造函数建立一个隐藏的临时对象,再进行对象间赋值。4、构造与析构函数构造函数是在用类定义对象时对对象进行初始化的函数,在定义对象时自动被调用。构造函数与类同名,无返回类型,可以有参数,可以重载,可以缺省参数。析构函数是在对象撤消时自动被调用的,作用是用来清除对象动态申请的资源,析构函数与类同名,但前加一个,无参数,不能重载。构造函数和析构函数一般不能显式调用,构造函数在下面三种情况是例外:对象数组初始化,在赋值号右边建立临时隐藏对象供对象赋值用,return 返回对象。拷贝构造函数的参数是同类对象或同类对象的引用,缺省的拷贝构造函数是将样板对象的数据成员对应赋值给新建对象。当数据成员中有指针时,一般需要编写自己的拷贝构造函数。5、静态成员静态成员是同类对象的公共成员,静态成员函数没有this指针,不能直接访问类的普通成员,只能访问静态成员,普通成员函数可以访问静态成员,任何一个对象改变了静态成员变量的值,将改变所有对象的该成员。在类外对静态成员变量的初始化:类型 类:成员变量=初始值;6、友元友元就是让类外的函数或别的类访问私有区,友元不是该类的成员,它破坏封装。友元有三种:友元函数。是类外的一般函数。声明:friend 返回类型 函数名(类 形式参数, );友元成员。是其它类的成员函数。声明:friend 返回类型 其它类名:函数名(类 形式参数, );友元类。别的类。声明:friend class 其它类名;友元可以在类的任何区声明,友元声明是单向的,没有传递性。由于友元没有this指针,所以友元的形式参数是对象或对象的引用。7、类的继承和访问权限派生类继承了基类的成员,可以有公有派生和私有派生。继承关系如下:有的部分被舍弃,反之不能赋值。8、 多继承问题一个类可以有多个基类,如果都是公有继承,在不同继承路径上继承的公共基类,由于在派生类中存在多个副本,会出现访问的二义性问题,要将这些副本合成一个,可以在派生时将这个基类声明为虚基类。9、构造函数和析构函数的调用次序在一个派生类中如果有对象成员,则基类、对象成员和派生类的构造次序如下:先 基类 后 对象成员 最后 派生类对象自身析构的次序与构造次序相反。构造函数和析构函数的调用次序与构造和析构次序相同。构造函数的实现如下:派生类名:构造函数名(参数表):基类1构造函数(参数),基类1构造函数(参数),对象成员1(构造参数表),对象成员2(构造参数表), 派生类对象的构造函数体10、流与流类库流运算符: 流类库:iostream、istream、ostream、ios,ios是istream、ostream的基类,istream和ostream又是iostream的基类,ios是抽象类。使用流类库要在程序前加上:#include “iostream.h”标准输出流:cout 是流向屏幕,它是一个ostream类的对象。标准输入流:cin 是由键盘流入,它是一个istream类的对象。11、函数重载重载是指一个符号可以有多重意义。函数重载参看前面所述。一般函数、普通成员函数、构造函数可以重载,析构函数不能重载。12、操作符重载对于对象与对象、对象与标准类型变量之间的运算,需要对运算符重载。一般可以有成员函数重载和友元函数重载。函数名: operator运算符(参与运算的参数)要注意+、-、 运算符的重载,其中运算符重载要流类(istream和ostream类)对象或引用作参数和返回值。其中=、()、-只能用成员函数重载。将类类型转换成普通类型与运算符重载类似。普通类型转换成类类型用构造函数实现。13、多态性分为静态的多态性和动态的多态性。静态的多态性用重载实现。动态的多态性是指:同一个消息发给不同对象,对象的反应不同。它是在运行过程中进行连接的,所以由叫动态联编。它的基础是虚函数。14、虚函数与纯虚函数虚函数的声明: virtual 返回类型 函数名(参数表);当用基类指针指向派生类对象时,通过这个指针调用虚函数将首先调用派生类中的实现,如果派生类中没有写这个函数的实现,则调用基类中的实现。虚函数的虚特性可以传递。如果派生类不写虚函数自己的实现,它又要在它的派生类中使用基类虚函数的虚特性,可以编写一个空的虚函数。纯虚函数的声明: virtual 返回类型 函数名(参数表)=0;纯虚函数不需要写它的实现,含有纯虚函数的类叫抽象类,不能建立对象,可以作基类和定义指针。在抽象类的派生类中要写出纯虚函数的实现,否则需要再次声明这个函数是虚函数,这样这个派生类也是抽象类。虚函数实现了动态连接,但在构造和析构函数中调用虚函数时是静态连接,即没有虚特性。15、模板函数模板与模板函数,定义、实例化,模板函数的重载。类模板与模板类,定义、实例化,类模板的派生。 一、单选题 第1题 如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是( ) A、一元运算符 B、二元运算符 C、选项A)和选项B)都可能 D、重载错误 答案:D 第2题 C+ 类体系中,不能被派生类继承的有( )。 A、转换函数 B、构造函数 C、虚函数 D、静态成员函数 答案:B 第3题 以下叙述中正确的是( ) A、构成C+语言程序的基本单位是类 B、可以在一个函数中定义另一个函数 C、 main()函数必须放在其他函数之前 D、所有被调用的函数一定要在调用之前进行定义 答案:A 第4题 设int a=10,b=11,c=12;,表达式(a+b) 的值为( ) A、2 B、0 C、-2 D、1 答案:B 第5题 下列关于构造函数说法不正确的是( ) A、构造函数必须与类同名 B、构造函数可以省略不写 C、构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭心理健康公益讲座方案及讲稿范本
- 城市轨道交通信息化规划方案
- 高效植物基肉制品加工工艺探索-洞察及研究
- GB/T 46236.2-2025中国语言资源保护调查规范第2部分:少数民族语言
- 远程工作与创造力-洞察及研究
- 电子封装专利保护研究-洞察及研究
- 职业教育微学习平台设计研究-洞察及研究
- 汛期安全隐患排查方案
- 安全生产标准化提升方案
- 住宿业品牌文化传承与创新-洞察及研究
- 室内设计项目的安全保证措施
- 2025年灌区毗河供水二期工程投资建设项目可行性研究报告-广州中撰咨询
- 白内障病人护理查房
- 渗滤液考试题及答案
- 2025年中国甲醇产业现状及发展趋势研究报告(咨询发布)
- 高速公路驾驶员安全培训
- 绿化及林业工程竣工资料表格
- 外阴激光手术
- 外贸跟单转正述职报告
- GB/T 6075.6-2024机械振动在非旋转部件上测量评价机器的振动第6部分:功率大于100 kW的往复式机器
- 2025年中电电力检修工程有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论