收藏 分享(赏)

c++复习题汇总(适合于电子阅读).doc

上传人:HR专家 文档编号:11303190 上传时间:2020-03-15 格式:DOC 页数:46 大小:169.51KB
下载 相关 举报
c++复习题汇总(适合于电子阅读).doc_第1页
第1页 / 共46页
c++复习题汇总(适合于电子阅读).doc_第2页
第2页 / 共46页
c++复习题汇总(适合于电子阅读).doc_第3页
第3页 / 共46页
c++复习题汇总(适合于电子阅读).doc_第4页
第4页 / 共46页
c++复习题汇总(适合于电子阅读).doc_第5页
第5页 / 共46页
点击查看更多>>
资源描述

1、面向对象程序设计课程 复习题一、选择题,从供选择的答案中选出正确的答案(每小题 2 分,共计 20 分)1、由 C+源程序文件编译而成的目标文件的缺省扩展名为( ) 。Acpp BexeCobj Dlik2、设 x 和 y 均为 bool 量,则 x int y; double z; MYSTRUC; ”是非法语句。()4、在 C+语言中,使用 struct(结构体)定义的类与使用 class 定义的类是一样的。 ()5、在声明一个类时,必须同时声明类的数据成员和成员函数。 ()6、设函数 fun( )是一个不属于任何类的普通函数,则在调用该函数时只能用 fun()方式,而不能用:fun()

2、方式来调用。 ( )7、如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的私有成员。( )派生类1、派生类的成员函数可以直接访问基类的所有成员。 ()2、如果派生类的继承方式是 protected 的,则在 main( )函数中,可以通过派生类对象来访问基类的公有的成员。 ( )3、如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。 ()函数重载1、函数重载既要求两函数参数对应的类型不同又要求参数个数不同。 (X) 2、函数重载时,它们的参数个数和类型要求都不能相同。 ()3、在 C+中,可以通过 ofstream 类对

3、象来建立一个输出文件流。 ( )4、在 C+中,文件的输入输出可以通过 iostream 类对象来完成。 ( )5、cout 属于标准输出流,而 cerr 和 clog 则不属于标准输出流。 ( )类的友元函数1、类的友员函数是指可以访问本类私有成员的其它类的成员函数。 ( )2、能访问一个类 CMyClass 中的 private 成员的可以是类 CMyClass 的成员函数,友元函数和友元类中的函数。 ( )构造函数和析构函数1、构造函数和析构函数均不能被说明为虚函数。 ( )2、构造函数和析构函数均都可以被说明为虚函数,只是构造函数和析构函数的功能不同而已。 ( )3、类的构造函数和析构

4、函数一般都声明为虚函数。 ( )4、析构函数的作用是当对象不用时,删除对象。 ( )5、构造函数不具备的特征是构造函数需指定类型说明。 ()6、对对象成员的构造函数的调用顺序,取决于这些对象成员在成员初始化列表中的顺序。( ) 二、简答题1、面向过程的程序设计和面向对象的程序设计的主要区别是什么? 答:主要区别:面向过程的程序设计:以功能为中心,采用函数来描述,函数和操作的数据是分离的。程序的实现通过函数的顺序执行来实现。面向对象的程序设计:它吸取了面向过程的程序设计的优点,同时又考虑了现实世界和计算机处理的关系,它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通

5、过响应消息来实现程序的功能。2、在 VC+6.0 中,语句 CWnd:Invalidate() ;和语句 CWnd:UpdateData(TRUE) ;的功能分别是什么?答:CWnd:Invalidate() ;的功能是:发送重绘视图的消息,即执行重绘视图的OnDraw()函数。CWnd:UpdateData(TRUE) ;的功能是:说明对话框中控件的数据有效,这些数据放入对应控件的变量中。3、什么是面向对象的程序设计? 答:面向对象的程序设计:它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。它有四个基本的特征,即抽象、封装、继承和多

6、态性。4、简要说明面向对象的程序设计的四个主要特征。 (评分标准:两个知识点各 4 分,后一个知识点每小点 2 分)答:主要特征:1) 、抽象,即忽略当前主题中与目标无关的那些方面,把它的主要特征抽取出来。抽象包括数据抽象和代码抽象。2) 、封装,它是将抽象得到的数据成员和代码相结合,形成一个有机的整体。并且,封装可以隐藏内部的细节。3) 、继承,它提供了代码重用的一种方式,派生类可以重用基类的属性和行为。4) 、多态性,它是指不同类的对象对同一消息作出不同反应,即 c+的代码可以根据运行情况的不同而执行不同的操作。5、什么是类?什么是对象?什么是封装?什么是多态性? 答:类:是指具有相同的属

7、性和操作方法,并遵守相同规则的对象的集合。对象:是包含现实世界物体特征的抽象实体,每个对象有内部的属性和操作方法。封装:是指将抽象得到的数据成员和代码相结合,形成一个有机的整体,并且将它们的细节隐藏起来的一种方法。多态性:是指允许不同类的对象对同一消息作出响应,即实现“一个接口,多种方法”或者说是向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法) 。C+中,多态性是通过指针和虚函数来实现的。6、类和结构有什么异同? (评分标准:两个知识点各 4 分)答:结构是类的一种特例,在结构体中也可以定义成员函数、构造函数和析构函数,成员也可使用 private、protected

8、、 public。结构和类的区别是:在缺省情况下,结构中的所有成员都是公有的,而在类中是私有的7、在 VC+6.0 中,模态对话框和非模态对话框的主要区别是什么?答:主要区别:模态对话框使用 DoModal()来启动,它垄断了消息循环,它只有在关闭后,才能返回应用程序。非模态对话框使用 Create()函数来产生,用DestroyWindow()函数来关闭。它与应用程序共用一个消息循环,它产生后,应用程序一样可以接收消息循环。8、什么是简单继承?什么是多重继承?在软件开发过程中,继承有什么好处?答: 简单继承:派生类的基类只有一个的继承方法。 (3 分)多重继承:派生类的基类同时有多个时的继承

9、方法。 (3 分)继承的好处:由于可以利用已有的软件基础来进行新的软件开发,所以能提高软件开发效率和软件质量。 (2 分)9、什么是函数重载?函数重载的主要作用是什么?调用不同的重载函数是在编译时决定还是在运行时决定?函数重载时参数个数不同时,能否有缺省参数,为什么?答:函数重载:C+允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。函数重载主要作用是:用同一个函数名可以去调用不同参数或功能的函数,即用同一个函数实现不同的操作。调用不同的重载函数是在编译时决定的。函数重载时参数个数不同时,不能有缺省参数。因为:有缺省参数时,就会发生二义性,编译出错。10、什么是友元函数?友元函数

10、的作用是什么?(评分标准:前两个知识点各 4 分)答:在一个类中,用 friend 声明的非本类函数就是友元函数。友元函数的作用:可以直接访问本类的私有成员,提高编程的灵活性和程序执行效率。11、c+ 中,什么是函数重载?什么是运算符重载?什么是构造函数?什么是析构函数?答:(评分标准:每小题 2 分,不完全正确,适当扣分,等价写法给满分)函数重载:函数的名称相同,参数的个数或类型不同的函数。运算符重载:对运算符赋予新的含义,使之一名多用(主要是指运算对象包含类对象) 。构造函数:构造函数的名字必须与类名同名,它不具有任何类型,不返回任何值,主要用于对象初始化。析构函数:函数名与类名相同,只是

11、在前边加“”符号,它不具有任何类型,不返回任何值,主要用于对象撤销后的清理工作。12、构造函数和析构函数的作用是什么?什么时候需要自己定义构造函数和析构函数?(评分标准:前两个知识点各 2 分,后一个知识点 4 分)答:构造函数的作用:用于新建对象的初始化工作。 (2 分)析构函数的作用:用于在撤销对象前,完成一些清理工作,比如:释放内存等。 (2 分)每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数;而对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数。 (4 分)3、填空题(8 分)链表相关题目、 假定有定义为“struct NODEint data;NODE

12、 * next;” ,下面算法根据 table 数组中的 n 个元素建立一个表头指针为 L 的链表,链表中结点值的顺序与数组元素值的顺序相同。void f5(NODE * p-data= (3) ;i+;p-next=NULL; /把最后一个结点的指针域置空p=L;L=L-next; /使 L 指向链表的第一个带值的结点Delete p;参考答案:(1) i #include struct NODEint data;NODE * next;void Create(NODE * NODE *p;if(ndata = _(2)_;i=1;p=Head;while( idata= tablei ;_

13、(4)_; _(5)_; /把最后一个结点的指针域置空 return;void main() int a10=1,2,3,4,5;NODE *H;Create(H,a,5);参考答案:(1) Head=NULL(2) table0(3) p-next (4) i+(5) p-next=NULL、下面的函数是判断由 pHead 所指向的链表是否是循环链表,如果是循环链表,则函数返回 1,否则返回 0。链表的结构为:struct MyLinkint data;MyLink *Next;补充程序中不完整的地方。int CheckLink(MyLink *pHead) MyLink *p;if (pH

14、ead=NULL) return 0;p = _(1)_;while (p!=NULL) if( p=pHead) _(2)_;else p = _(3)_;return 0; 参考答案:(1) pHead-Next(2) return 1(3) p-Next递归函数题、根据程序说明和程序中的注释,填充程序中不完整的部分。类 Number 的成员函数Factorial 是递归函数,功能是求 n!(即 n 的阶乘,假设 n0) 。#include using namespace std;class Number private:int Num;public:int n;int Factorial

15、 (int n) /递归函数 Factorial (n)求 n! 。if (_(1)_) return 1;else return _(2)_; int GetNum()return Num;Number(int n=1) if (nFactorial(_(5)_);/输出 Num!。delete p1;delete p2;参考答案:(1)n=0(2)n*Factorial (n-1)(3)new Number(4)new Number(7)(5)p2-GetNum()、下面递归函数 NTimes (n,m)求 nm 。填充程序中不完整的部分(假设 m=0,否则返回值为 0) 。int NTi

16、mes (int n,int m) /递归函数 NTimes (n,m)求 nm。 if (musing namespace std;class Number private:int Num;public:int n;int TwoTimes (int n) /递归函数 TwoTimes (n)求 2n 。if (_(1)_) return 0;if (n=0) _(2)_;else return _(3)_; int GetNum()return Num;Number(int n=0) Num = n;void main()Number *p;p =_(4)_;/动态生成由 p 指向的 Nu

17、mber 对象,并使 Num 为 5。coutTwoTimes(_(5)_);/输出 2Numdelete p;参考答案:(1) nGetNum()构造函数类、请按提示要求完成以下程序段的填空#include class studentpublic:string name; /姓名float score; /成绩static float total; /学生的总成绩student(string n=”li”,float s=60.0) name = n; score = s; /定义类的构造函数(3) ; /在类外初始化静态成员 total 的初值为 0。void main() student

18、 *p1,*p2;(4) ; /调用无参构造函数生成由 p1 指向的动态对象(5) ; /调用带参构造函数生成由 p2 指向的动态对象,/姓名为“zhang” ,成绩为 90。p1-total = p1-score + p2-score; if (p1!=NULL) delete p1;if (p2!=NULL) delete p2;return ;参考答案:(3) student: total = 0.0(4) p1 = new student( )(5) p2 = new student(“zhang”,90)、根据程序说明和程序中的注释,填充程序中不完整的部分。MyString 是自定义

19、的一个字符串类,其成员函数 IsPalindrome 判断该字符串对象是否是回文(即字符串顺读和倒读是一致的,比如字符串“12321”和“abba ”都是回文,而“12345”则不是回文) 。构造函数用于给字符串赋值。#include using namespace std;#define MaxLen 100class MyString private:int Len; /字符串的长度char ValueMaxLen;/字符串的值public:int IsPalindrome() /判断 Value 是否是回文,是则返回 1,不是返回 0。 int i=0;while(iMaxLen) Le

20、n = MaxLen; else Len=n;if (LenIsPalindrome()class A int a,b;public:A(int aa=0,int bb=0) a=aa; b=bb; /定义类 A 的构造函数,使参数 aa 和 bb 的默认值为 0,/在函数体中用 aa 初始化 a,用 bb 初始化 b;void main() A *p1,*p2;_(4)_; /调用无参构造函数生成由 p1 指向的动态对象_(5)_; /调用带参构造函数生成由 p2 指向的动态对象,/使 a 和 b 成员分别被初始化为 2 和 3if (p1!=NULL) delete p1;if (p2!=

21、NULL) delete p2;return ;参考答案:(4) p1 = new A( )(5) p2 = new A(2,3)4、阅读下面的程序,写出程序运行的结果。 (共 20 分)c+基础知识程序题程序 1(6 分)#include class CStr int n; char str50; public: CStr( char *p,int len=0) int i; n=len;for (i=0;i=a) int main()int a=5,b;int int f(int x,int y,int z);b=a+;c=f(a,b,c);coutusing namespace std;

22、int main() int f(int int a=4,b=5,c;while(b)c=f(a,b);cout20) b=0;else b=b+5;return 0;int f(int x=y+;m=x+y;return(m); 答:(评分标准:a 和 c 正确分别得 3 分)5 5 1110 10 21程序 4(6 分)#include class A int n; char str100; public: A( char *p,int len=0)int i; n=len;for (i=0;i9) cout class Pet /基类public:virtual void Speak()

23、 coutSpeak(); p2=new Cat; p2-Speak();p3=new Dog; p3-Speak();Pet p4.Speak();delete p2;delete p3;程序 1 参考答案: (10 分)How does a pet speak ?wang!wang!miao!miao!miao!miao!wang!wang!miao!miao!程序 2(10 分)#include class Win public:virtual void shape( ) coutshape();p1 = p1-shape();p1-act();参考答案:WinButWinButBut程

24、序 3(10 分)#include class Pen public:char color; Pen() coutwrite();pt1 = pt1-write();pt1-Rewrite();参考答案:程序运行结果为:beginbeginPenPencilPencil程序 4(10 分)#include class Window public:int size; Window() coutOutWin();pt1-Open();pt1 = pt1-OutWin();pt1-Open();答:程序运行结果为:(10 分,评分标准:前 4 行每行 2 分,后 2 行每行 1 分)Win Begi

25、nWin BeginWinOpenWinButOpenWin程序 5(10 分)#include class Base public:virtual int fun( ) return 25; ;class Derive: public Base public:virtual int fun() return 60; ;void main()Derive d;Base coutfun()fun() class Pet /基类public:virtual void Speak() coutSpeak(); p2=new Cat; p2-Speak();p3=new Dog; p3-Speak()

26、;Pet p4.Speak();delete p2;delete p3;程序 1 参考答案: (10 分)How does a pet speak ?wang!wang!miao!miao!miao!miao!wang!wang!miao!miao!程序 2(10 分)#include class Win public:virtual void shape( ) coutshape();p1 = p1-shape();p1-act();参考答案:WinButWinButBut程序 3(10 分)#include class Pen public:char color; Pen() coutwr

27、ite();pt1 = pt1-write();pt1-Rewrite();参考答案:程序运行结果为:beginbeginPenPencilPencil程序 4(10 分)#include class Window public:int size; Window() coutOutWin();pt1-Open();pt1 = pt1-OutWin();pt1-Open();答:程序运行结果为:(10 分,评分标准:前 4 行每行 2 分,后 2 行每行 1 分)Win BeginWin BeginWinOpenWinButOpenWin程序 5(10 分)#include class Base

28、 public:virtual int fun( ) return 25; ;class Derive: public Base public:virtual int fun() return 60; ;void main()Derive d;Base coutfun()fun()class complex int real; int imag; public: complex(int r=0,int i=0) : real(r),imag(i) complex operator+() real+; return *this;void show( ) cout int sum(int ,int

29、);void main()int ia5 = 2,3,6,8,10;A ;sumOfArray = sum(ia,5);cout class Datepublic:Date(int y=2001,int m=1,int d=1)Year=y;Month=m;Day=d;VoidPrintDate()coutclass Studentpublic:Student ( )cout #include class Person char m_strName10; /姓名int m_nAge; /年龄public:Person(char* name,int age) strcpy(m_strName,

30、name);m_nAge = age;coutclass Planepublic:Plane( ) coutclass chairpublic:chair( )coutclass AApublic:AA( )coutclass Apublic:A( ) coutclass Aprivate:static int n;int Num;public:A(int x=0) Num=x; n+; A( ) n- ; static int GetNum() return n; void print();Void A:print()cout print(); A a; a.print(); delete p; cout class Date int Year,Month,Day;public:void SetDate(int y,int m,int d)Year=y;Month=m;Day=d;void PrintDate()coutYear“/“Month“/“Dayendl;Date( )SetDate(2008,1,1); cout”con= Date0”endl;Date(int y,int m,int d)SetDate(y,m,d);cout”con=Date1”endl; Date ( ) cout”des= Date”endl;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 初中教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报