C++复习题汇总.docx
《C++复习题汇总.docx》由会员分享,可在线阅读,更多相关《C++复习题汇总.docx(60页珍藏版)》请在冰豆网上搜索。
C++复习题汇总
面向对象程序设计课程复习题
一、判断题
1.程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。
2.派生类的成员函数可以直接访问基类的所有成员。
3.函数的参数和返回值类型可以是简单数据类型,也可以是指针、引用、数组和类。
4.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这个函数自动继承基类中虚函数的特性。
5.函数重载既要求两函数参数对应的类型不同又要求参数个数不同。
6.字符串”hello,world”在内存中存放时,占用11个字节的空间
7.当函数的返回值是数组类型的,传递的是数组第一个元素的地址。
8.在内存中,一个字符常量或变量是以ASCII码值存储的,它可直接作为整数值参加运算。
1、√2、X3、X4、√5、X6、X7、√8、√
1.在C++中,也可使用struct来声明类,但在该类中不能声明成员函数。
()
2.在定义二维数组时,语句“inta[][4]={{1,2,3},{4}};”是不正确的。
()
3.采用inline定义内联函数时,在对于函数代码少、频繁调用的情况下特别有效。
()
4.类中的静态成员数据为该类的所有对象所共享,并且,在该类对象被撤销时,静态成员并没有撤销。
()
5.构造函数和析构函数均不能被说明为虚函数。
()
6.char*constp表明p是一个指针,它只能指向一个字符串常量。
()
7.如果派生类的继承方式是protected的,则在main()函数中,可以通过派生类对象来访问基类的公有的成员。
()
8.在C++中,可以通过ofstream类对象来建立一个输出文件流。
()
9.在C语言中,不使用命名空间,但在C++程序中,一定要使用命名空间。
()
10.在MFC编程中,通过Invalidate(TRUE)可以发出重绘视图的消息。
()
12345678910
××√√×××√×√
1.C++程序总是从第一个定义的函数开始执行。
()
2.在c++语言中,也可以使用struct(结构体)来定义一个类。
()
3.设x和y均为bool量,则x&&y为真的条件是其中一个为真。
4.程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。
()
5.构造函数和析构函数均都可以被说明为虚函数,只是构造函数和析构函数的功能不同而已。
()
6.类的友员函数是指可以访问本类私有成员的其它类的成员函数。
()
7.函数重载时,它们的参数个数和类型要求都不能相同。
()
8.在C++中,文件的输入输出可以通过iostream类对象来完成。
()
9.在C+语言中,指针的概念与C语言是一样的,都是指变量的地址。
()
10.在MFC编程中,视图/文档类程序是通过OnDraw()函数进行进行输出的。
()
12345678910
×√×√××××√√
1.C++语言是在C语言基础上扩充了函数功能而得来的。
()
2.在C++语言中,使用struct(结构体)定义的类与使用class定义的类是一样的。
()
3.每个对象也有地址,该地址就是存储此对象数据成员的单元的首地址。
()
4.如果在一个类的对象之间要进行数据交换,可以使用该类的静态数据成员来完成。
()
5.在声明一个类时,必须同时声明类的数据成员和成员函数。
()
6.设函数fun()是一个不属于任何类的普通函数,则在调用该函数时只能用fun()方式,而不能用:
:
fun()方式来调用。
()
7.类的构造函数和析构函数一般都声明为虚函数。
()
8.设Time是一个类,现有指针p的定义语句:
constTime*p;则通过指针p不可以修改Time类对象的公有数据成员。
()
9.使用MFC编程时,OnDraw函数是CView类的成员函数。
()
10.在VC6.0开发环境中,对导入的所有位图资源都可以进行修改。
()
12345678910
××√√×××√√×
1.类的友员函数是指可以访问本类私有成员的其它类的成员函数。
()
2.在定义二维数组时,语句“inta[][3]={{1,3,5},{2}};”是正确的。
()
3.如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的私有成员。
()
4.函数重载时,它们的参数个数和类型要求都不能相同。
()
5.在文档/视图结构的程序中,输出是在OnDraw()函数中完成的。
()
6.在C++中,标识符Max和MAX是不一样的。
()
7.析构函数的作用是当对象不用时,删除对象。
()
8.在C++中,文件的输入输出可以通过iostream类对象来完成。
()
9.在声明一个类时,可以不同时声明类的数据成员和成员函数。
()
10.在VC6.0开发环境中,可以同时开发几个工程。
()
12345678910
×√××√√××√√
1.C++函数必须有返回值,否则不能使用函数。
()
2.构造函数不具备的特征是构造函数需指定类型说明。
()
3.采用inline定义内联函数时,在对于函数代码少、频繁调用的情况下特别有效。
()
4.VisualC++集成开发环境中,一个Workspace可以创建多个Project。
()
5.构造函数和析构函数均不能被说明为虚函数。
()
6.char*constp表明p是一个指针,它只能指向一个字符串常量。
()
7.cout属于标准输出流,而cerr和clog则不属于标准输出流。
()
8.ASCII码文件和二进制文件都可在记事本中直接打开。
()
9.在C++程序中,可以使用命名空间,也可不使用命名空间。
()
10.在文档/视图结构的程序中,输出是在OnDraw()函数中完成的。
()
12345678910
×√√√××××√√
1.语句“typedefstruct_MYSTRUC{intx;inty;doublez;}MYSTRUC;”是非法语句。
()
2.对对象成员的构造函数的调用顺序,取决于这些对象成员在成员初始化列表中的顺序。
()
3.能访问一个类CMyClass中的private成员的可以是类CMyClass的成员函数,友元函数和友元类中的函数。
()
4.C++中,如果条件表达式值为-1,则表示逻辑为假。
()
6.在C++语言中,表达式:
“b++;”和“++b;”在任何地方的作用都是不一样的。
()
7.在定义二维数组时,语句:
inta[5][];是错误的。
()
8.在C++中,标识符Max和MAX是不一样的。
()
9.析构函数的作用是当对象不用时,删除对象。
()
10.引入内联函数的主要目的是缩短程序代码,让程序少占用内存空间。
()
1234678910
××√××√√××
二、简答题
1、面向过程的程序设计和面向对象的程序设计的主要区别是什么?
2、什么是对象?
什么是简单继承?
什么是多重继承?
3、在VC++6.0中,语句CWnd:
:
Invalidate();和语句CWnd:
:
UpdateData(TRUE);的功能分别是什么?
4、什么是面向对象的程序设计?
5、什么是类?
什么是封装?
什么是多态性?
6、在VC++6.0中,模态对话框和非模态对话框的主要区别是什么?
7.什么是面向对象的程序设计?
什么是简单继承?
什么是多重继承?
8.什么是多态性?
C++中,多态性是如何实现的?
9.c++中,什么是函数重载?
什么是运算符重载?
什么是构造函数?
什么是析构函数?
10.构造函数和析构函数的作用是什么?
什么时候需要自己定义构造函数和析构函数?
11.什么是面向对象的程序设计?
它的几个特征是什么?
12.函数重载的主要作用是什么?
调用不同的重载函数是在编译时决定还是在运行时决定?
13.简述类和对象的含义。
面向对象程序设计和面向过程程序设计的主要区别是什么?
14.什么是友元函数?
友元函数的作用是什么?
15.函数重载的主要作用是什么?
函数重载时参数个数不同时,能否有缺省参数,为什么?
16.简要说明面向对象的程序设计的四个主要特征。
17.类和结构有什么异同?
18.多态性是指什么?
C++中多态性是如何实现的?
19.什么是类?
什么是对象?
什么是面向对象的程序设计?
20.什么是简单继承?
什么是多重继承?
在软件开发过程中,继承有什么好处?
21.在C++中,分别使用while和do…while语句等价实现下列for语句的功能:
for(i=0,k=0;i<5;k+=i++);
22.构造函数和析构函数的作用是什么?
什么时候需要自己定义构造函数和析构函数?
23.什么是对象?
面向对象程序设计的四个基本特征是什么?
24.什么是函数重载?
它的主要作用是什么?
调用不同的重载函数是在编译时决定还是在运行时决定?
1、答:
主要区别:
面向过程的程序设计:
以功能为中心,采用函数来描述,函数和操作的数据是分离的。
程序的实现通过函数的顺序执行来实现。
面向对象的程序设计:
它吸取了面向过程的程序设计的优点,同时又考虑了现实世界和计算机处理的关系,它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。
2、答:
对象:
是包含现实世界物体特征的抽象实体,每个对象有内部的属性和操作方法。
简单继承:
派生类的基类只有一个的继承方法。
多重继承:
派生类的基类同时有多个时的继承方法。
3、答:
CWnd:
:
Invalidate();的功能是:
发送重绘视图的消息,即执行重绘视图的OnDraw()函数。
CWnd:
:
UpdateData(TRUE);的功能是:
说明对话框中控件的数据有效,这些数据放入对应控件的变量中。
4、答:
面向对象的程序设计:
它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。
它有四个基本的特征,即抽象、封装、继承和多态性。
5、答:
类:
是指具有相同的属性和操作方法,并遵守相同规则的对象的集合。
封装:
是指将抽象得到的数据成员和代码相结合,形成一个有机的整体,并且将它们的细节隐藏起来的一种方法。
多态性:
是指允许不同类的对象对同一消息作出响应,即实现“一个接口,多种方法”。
6、答:
主要区别:
模态对话框使用DoModal()来启动,它垄断了消息循环,它只有在关闭后,才能返回应用程序。
非模态对话框使用Create()函数来产生,用DestroyWindow()函数来关闭。
它与应用程序共用一个消息循环,它产生后,应用程序一样可以接收消息循环。
7.答:
(评分标准:
两个知识点各4分,后一个知识点每小点2分)
面向对象的程序设计:
它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。
(4分)
简单继承:
派生类的基类只有一个的继承方法。
(2分)
多重继承:
派生类的基类同时有多个时的继承方法。
(2分)
8.答:
(评分标准:
两个知识点各4分)
多态性是指:
向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。
C++中,多态性是通过指针和虚函数来实现的。
9.答:
(评分标准:
每小题2分,不完全正确,适当扣分,等价写法给满分)
函数重载:
函数的名称相同,参数的个数或类型不同的函数。
运算符重载:
对运算符赋予新的含义,使之一名多用(主要是指运算对象包含类对象)。
构造函数:
构造函数的名字必须与类名同名,它不具有任何类型,不返回任何值,主要用于对象初始化。
析构函数:
函数名与类名相同,只是在前边加“~”符号,它不具有任何类型,不返回任何值,主要用于对象撤销后的清理工作。
10.(评分标准:
前两个知识点各2分,后一个知识点4分)
答:
构造函数的作用:
用于新建对象的初始化工作。
(2分)
析构函数的作用:
用于在撤销对象前,完成一些清理工作,比如:
释放内存等。
(2分)
每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数;而对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数。
(4分)
11.(评分标准:
两个知识点各4分,后一个知识点每小点1分)
答:
面向对象的程序设计:
它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。
它有四个基本的特征,即抽象、封装、继承和多态性。
12.(评分标准:
前两个知识点各4分)
答:
函数重载主要作用是:
用同一个函数名可以去调用不同参数或功能的函数,即用同一个函数实现不同的操作。
调用不同的重载函数是在编译时决定的。
13.(评分标准:
前两个知识点各2分,后一个知识点4分)
答:
类:
是指具有相同的属性和操作方法,并遵守相同规则的对象的集合。
对象:
是包含现实世界物体特征的抽象实体,每个对象有内部的属性和操作方法。
主要区别:
面向对象的程序设计:
它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。
编程时可以不知道对象的内部实现细节。
面向过程的程序设计:
程序由一系列的函数构成,程序的实现通过函数的顺序执行来实现。
编程时需要清楚程序实现的每一步细节。
14.(评分标准:
前两个知识点各4分)
答:
在一个类中,用friend声明的非本类函数就是友元函数。
友元函数的作用:
可以直接访问本类的私有成员,提高编程的灵活性和程序执行效率。
15.(评分标准:
前两个知识点各4分)
答:
函数重载主要作用是:
用同一个函数名可以去调用不同参数或功能的函数,即用同一个函数实现不同的操作。
函数重载时参数个数不同时,不能有缺省参数。
因为:
有缺省参数时,就会发生二义性,编译出错。
16.(评分标准:
两个知识点各4分,后一个知识点每小点2分)
答:
主要特征:
1)、抽象,即忽略当前主题中与目标无关的那些方面,把它的主要特征抽取出来。
抽象包括数据抽象和代码抽象。
2)、封装,它是将抽象得到的数据成员和代码相结合,形成一个有机的整体。
并且,封装可以隐藏内部的细节。
3)、继承,它提供了代码重用的一种方式,派生类可以重用基类的属性和行为。
4)、多态性,它是指不同类的对象对同一消息作出不同反应,即c++的代码可以根据运行情况的不同而执行不同的操作。
17.(评分标准:
两个知识点各4分)
答:
结构是类的一种特例,在结构体中也可以定义成员函数、构造函数和析构函数,成员也可使用private、protected、public。
结构和类的区别是:
在缺省情况下,结构中的所有成员都是公有的,而在类中是私有的
18.(评分标准:
两个知识点各4分)
答:
多态性是指:
向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。
C++中,多态性是通过指针和虚函数来实现的。
19.答:
类:
是指具有相同的属性和操作方法,并遵守相同规则的对象的集合。
(2分)
对象:
是包含现实世界物体特征的抽象实体,每个对象有内部的属性和操作方法。
(2分)
面向对象的程序设计:
它吸取了面向过程的程序设计的优点,同时又考虑了现实世界和计算机处理的关系,它的整个程序由一系列相互作用的对象构成,对象之间的交互通过发送消息来实现,对象通过响应消息来实现程序的功能。
(4分)
20.答:
简单继承:
派生类的基类只有一个的继承方法。
(3分)
多重继承:
派生类的基类同时有多个时的继承方法。
(3分)
继承的好处:
由于可以利用已有的软件基础来进行新的软件开发,所以能提高软件开发效率和软件质量。
(2分)
21.答:
(评分标准:
每小题4分,不完全正确,适当扣分,等价写法给满分)
(1)用while语句:
(2)用do...while语句:
i=0;i=0;
k=0;k=0;
while(i<5)do
{{
k+=i++;k+=i++;//该语句可有多种表达
}}while(i<5);
22.答:
(评分标准:
前两个知识点各2分,后一个知识点4分)
构造函数的作用:
用于新建对象的初始化工作。
(2分)
析构函数的作用:
用于在撤销对象前,完成一些清理工作,比如:
释放内存等。
(2分)
每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数;而对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数。
(4分)
23.答:
(评分标准:
两个知识点各4分,后一个知识点每小点1分)
对象:
是包含现实世界物体特征的抽象实体,每个对象有内部的属性和操作方法。
它有四个基本的特征,即抽象、封装、继承和多态性。
24.答:
(评分标准:
前两个知识点各3分,后一个知识点2分)
函数重载:
C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。
主要作用是:
用同一个函数名可以去调用不同参数或功能的函数,即用同一个函数实现不同的操作。
调用不同的重载函数是在编译时决定的。
三、填空题(8分)
1.下面是一个求数组元素之和的程序。
主程序中定义并初始化了一个数组,然后计算该数组各元素的和,并输出结果。
函数sum计算数组元素之和。
填充程序中不完整的部分。
#include
intsum(int[],int);
voidmain()
{
intia[5]={2,3,6,8,10};
A;
sumOfArray=sum(ia,5);
cout<<"Sumofarray:
"<}
intsum(intarray[],intlen)
{
intiSum=0;
for(inti=0;B;C)
D;
returniSum;
}
AintsumOfArray;Bi2.假定有定义为“structNODE{intdata;NODE*next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。
voidf5(NODE*&L,inttable[],intn)
{
if(n<=0){L=NULL;return;}
L=newNODE;//生成附加的头结点
inti=0;
NODE*p=L;
while(
(1)){
p=p->next=
(2);
p->data=(3);
i++;
}
p->next=NULL;//把最后一个结点的指针域置空
p=L;
L=L->next;//使L指向链表的第一个带值的结点
Deletep;
}
(1)i(2)newNODE
(3)table[i]
三、填空题(每空2分,共10分)
下面程序中的Create函数根据table数组中的前n个元素建立一个表头指针为Head的链表,链表中结点值的顺序与数组元素值的顺序相同。
填充程序中不完整的部分,使程序完整正确。
#include
#include
structNODE{intdata;NODE*next;};
voidCreate(NODE*&Head,inttable[],intn)
{
inti;
NODE*p;
if(n<=0){___
(1)___;return;}//没有元素时,链表指向空。
Head=newNODE;//生成第一个结点
Head->data=___
(2)___;
i=1;
p=Head;
while(i{
p=___(3)___=newNODE;
p->data=table[i];
___(4)___;
}
___(5)___;//把最后一个结点的指针域置空
return;
}
voidmain()
{
inta[10]={1,2,3,4,5};
NODE*H;
Create(H,a,5);
}
三、填空题
(1)Head=NULL
(2)table[0](3)p->next(4)i++(5)p->next=NULL
三、填空题(每空2分,共10分)
1.根据程序说明和程序中的注释,填充程序中不完整的部分。
类Number的成员函数TwoTimes是递归函数,功能是求2n(假设n<0时返回值为0)。
#include
usingnamespacestd;
classNumber
{
private:
intNum;
public:
intn;
intTwoTimes(intn)//递归函数TwoTimes(n)求2n。
{
if(___
(1)___)return0;
if(n==0)___
(2)___;
elsereturn___(3)___;
}
intGetNum()
{
returnNum;
}
Number(intn=0){Num=n;}
};
voidmain()
{
Number*p;
p=___(4)___;//动态生成由p指向的Number对象,并使Num为5。
cout<TwoTimes(___(5)___);//输出2Num
deletep;
}
三、填空题
(1)n<0
(2)return1(3)2*TwoTimes(n-1)(4)newNumber(5)(5)p->GetNum()
三、填空题(每空2分,共10分)
1.根据程序说明和程序中的注释,填充程序中不完整的部分。
MyString是自定义的一个字符串类,其成员函数IsPalindrome判断该字符串对象是否是回文(即字符串顺读和倒读是一致的,比如字符串“12321”和“abba”都是回文,而“12345”则不是回文)。
构造函数用于给字符串赋值。
#include
usingnamespacestd;
#defineMaxLen100
classMyString
{private:
intLen;//字符串的长度
charValue[MaxLen];//字符串的值
public:
intIsPalindrome()//判断Value是否是回文,是则返回1,不是返回0。
{inti=0;
while(i{
if(Value[i]!
=___
(1)___)return0;
___
(2)___;
}
____(3)___;
}
MyString(intn,char*pstr)//把pstr所指向的字符串赋值给Value
{inti;
if(n>MaxLen)Len=