C++程序设计基 整理 题库.docx
《C++程序设计基 整理 题库.docx》由会员分享,可在线阅读,更多相关《C++程序设计基 整理 题库.docx(23页珍藏版)》请在冰豆网上搜索。
C++程序设计基整理题库
《C++程序设计基础》题库
一、选择题
1.下面不属于面向对象语言的特征的是___B___。
A.继承性B.兼容性C.多态性D.封装性
2.C++语言是从早期的C语言发展演变而来的,与C语言相比,它在求解问题上进行的最大改进是___B___。
A、面向过程 B、面向对象 C、安全性 D、复用性
3.C++的基本数据类型中,用来判断真假的数据类型为B。
A、intB、boolC、charD、float
4.关于字符常量的写法,错误的是__A____。
A、'/'B、"a"C、'\t'D、'\0'
5.下面C++标识符命名正确的是:
___D___。
A、classB、@mailC、1varD、_inline
6.下面基本数据类型初始化表达式错误的是___C___。
A、inti(5);B、floatf=3.56f;C、charc='ab'D、doublef=3.56;
7.C++对C语言作了很多改进,下列描述中___D___使得C语言发生了质变,从面向过程变成了面向对象。
A、增加了一些新的运算符;
B、允许函数重载,并允许设置缺省参数;
C、规定函数说明必须用原型;
D、引进了类和对象的概念;
8.在C++中,关于下列函数参数的描述中,__B____是正确的。
A、C++语言中,实参是按照自左至右的顺序求值的;
B、若一个参数设置了默认值,则其右边的所有参数都具有默认值;
C、函数参数的默认值不允许是表达式;
D、设置参数默认值时,应该全部参数都设置;
9.重载函数在调用时选择的依据中,___D___是错误的。
A、参数个数;B、参数的类型;
C、函数名字;D、函数的类型。
10.已知程序中已经定义了函数test,其原型是inttest(int,int,double);,则下列重载形式中不正确的是____A__。
A、chartest(int,int,int);B、doubletest(int,int,double);
C、inttest(int,int,float);D、inttest(int,double);
11.关于类的概念下列说法正确的是___C___。
A、类和结构体是同一个概念B、类的数据成员外界都不可访问
C、类可以没有显式的构造函数D、类一定要有显式的析构函数
12.关于类和对象的说法正确的是______。
A、面向对象程序设计方法通过数据抽象和行为抽象,封装形成了“类”B、类具有的行为由变量表示。
C、类的属性一般由函数表示,且定义为public的D、类是具体的,对象是抽象的
13.关于类和对象不正确的说法是___C___。
A、类是一种类型,它封装了数据和操作B、对象是类的实例
C、一个类的对象只有一个D、一个对象必属于某个类
14.已知A是一个类,则执行语句“Aa;”时,将自动调用该类的__A____。
A、构造函数 B、拷贝构造函数C、析构函数 D、数据成员
15.在下列关键字中,用于说明类中公有成员的是__A____。
A.public;B.private;C.protected;D.friend
16.__D____是析构函数的特征。
A、析构函数可以有一个或多个参数;
B、析构函数名与类名不同;
C、析构函数的定义只能在类体内;
D、一个类中只能定义一个析构函数;
17.如果类的成员在定义时使用关键字public来设置访问权限,则该成员是__A____。
A.公有类型B.私有类型C.受保护类型D.任意类型
18.关于成员函数特征的下列描述中,___A___是错误的。
A、成员函数一定是内联函数;
B、成员函数可以重载;
C、成员函数可以设置缺省参数值;
D、成员函数可以是静态的;
19.下列描述中,___D___是不正确的。
A、面向对象程序设计可重用性较好;
B、对象之间通过消息进行信息传递;
C、多态性体现了行为共享;
D、面向对象方法的核心是继承;
20.派生类的对象对它的基类成员中A是可以访问的。
A、公有继承的公有成员;
B、公有继承的私有成员;
C、公有继承的保护成员;
D、私有继承的公有成员;
21.下列标识符的定义中合法的是(A/C)。
A.-abcB.forC.intlD.”how”
22.执行下列语言后,i和j的值分别为(C)。
inti=5,j=8,t;
int&ri=i;
int&rj=j;
t=ri;ri=rj;rj=t;
A.5和5B.5和8C.8和5D.8和8
23.下列关于C++函数的叙述中正确的是(D)。
A.函数在调用之前必须先声明B.每个函数都必须返回一个值
C.每个函数至少要有一个参数D.函数可以自己调用自己
24.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(B)。
A.地址传递B.单向值传递C.双向值传递D.不确定
25.系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中不能被作为依据的是(D)。
A.参数个数B.参数类型C.函数名称D.函数类型
26.标志着C++从面相过程变成面相对象的主要措施是(D)。
A.增加了新的运算符B.允许函数重载,设置默认参数
C.规定函数声明必须用原型D.引用了类和对象的概念
27.有关类和对象的说法错误的是(C)。
A.对象是类的一个实例
B.任何一个对象只能属于一个具体的类
C.一个类只能有一个对象
D.类与对象的关系和数据类型与变量的关系相似
28.对任意一个类,析构函数的个数最多为(B)个。
A.0.B.1C.2D.4
29.已知A是一个类,则执行语句Aa;时,将自动调用该类的(B)。
A.有参构造函数B.无参构造函数
C.拷贝构造函数D.赋值构造函数
30.下述静态数据成员的特性中,(D)是错误的。
A.说明数据成员时前边要加修饰符static
B.静态数据成员要在类体外进行初始化
C.引用静态数据成员时,要在静态数据成员名前加“类名”和作用域运算符
D.静态数据成员不是所有对象所共有的。
31.下面有关C++构造函数和析构函数说法正确的是D。
A、如果不声明任何构造函数,系统会赋给一个默认(无参)的构造函数。
如果自定义了构造函数,系统也会赋给默认的构造函数。
B、析构函数是用来完成对象被删除前的清理工作,它可以接受参数。
C、构造函数和析构函数都可以是虚函数。
D、构造方法是与类同名的方法,它可以重载。
32.已知类D继承类B,且有声明语句Bb,*p;Dd;下面赋值语句错误的是___C___。
A、d=b;B、p=&d;C、b=d;D、p=&b;
33.下列有关继承和派生的叙述中,正确的是______。
A、如果一个派生类私有继承其基类,则该派生类中的成员不能访问基类的保护成员
B、派生类的成员函数可以访问基类的所有成员
C、在创建派生类对象时,先调用派生类构造函数,再调用基类的构造函数。
D、在销毁派生类对象时,先调用派生类析构函数,再调用基类的析构函数。
34.C++语言的跳转语句中,对于break和continue说法正确的是_B
A、break语句只应用与循环体中
B、continue语句只应用于循环体中
C、break是无条件跳转语句,continue不是
D、break和continue都可以用于跳出if条件分支。
35.下面是关于派生类声明的开始部分,其中正确的是___D___。
A、classvirtualB:
publicAB、virtualclassB:
publicA
C、classB:
publicAvirtualD、classB:
virtualpublicA
36.对基类和派生类的关系描述中,B是错的。
A、派生类是基类的具体化;B、派生类是基类的子集;
C、派生类是基类定义的延续;D、派生类是基类的组合。
37.下列运算符中,不能被重载的是C。
A.&&B.-C..*D.++
38.静态数据成员的初始化必须在B。
A、类内B、类外C、在构造函数内D、静态成员函数内
39.关于虚函数与抽象类,下列表述正确的是__D____。
A、虚函数声明可以同时出现在类定义中的函数原型声明中,和成员函数的实现的时候。
B、虚函数不能声明为静态函数。
C、抽象类可以实例化。
D、派生类必须重新定义基类的虚函数。
40.设置虚基类的目的是B。
A.简化程序;B.消除二义性;C.提高运行效率;D.减少目标代码。
41.执行语句:
inta=5,*pa;pa=&a;后,下面描述错误的是(A)。
A.pa的值为5B.pa指向整形变量a
C.*pa表示变量a的值D.pa的值是变量a的地址
42.假设a=5,执行下列语句后,a的值为(D)。
switch(a)
{case4:
a++;
case5:
a--;
case6:
++a:
break;
case7:
--a;
default:
a++;}
A.2B.3C.4D.5
43.有函数原型声明语句如下:
voidfun(intx,inty=10,charz=’#’);下面调用语句中不合法的是(C)。
A.fun(5)B.fun(5,8)C.fun(6,’*’)D.fun(10,10,’*’)
44.调用函数时,如果实参是一个数组名,则向函数传递的是(B)。
A.数组的长度B.数组的首地址
C.数组中每个元素的地址D.数组中每个元素的值
45.在C++中,关于下列设置参数默认值的描述中,正确的是(C)。
A.不允许设置参数的默认值
B.设置参数默认值只能在定义函数时设置
C.设置参数默认值时,应该是先设置右边的,再设置左边的
D.设置参数默认值时,应该全部参数都设置
46.有关类的说法错误的是(D)。
A.类是一种用户自定义的数据类型
B.只有类中的成员函数才能存取类中的私有数据
C.在类中如果不作特殊说明,所指的数据均为私有类型
D.在类中如果不作特殊说明,所指的成员函数均为公有类型
47.下列关于构造函数的描述中,错误的是(D)。
A.构造函数的函数名与类名相同B.构造函数可以重载
C.构造函数可以设置默认参数D.构造函数必须指定类型说明
48.通常拷贝构造函数的参数是(D)。
A.某个对象名B.某个对象的成员名
C.某个对象的指针名D.某个对象的引用名
49.已知A是一个类,则执行语句Aa;时,将自动调用该类的(B)。
A.有参构造函数B.无参构造函数
C.拷贝构造函数D.赋值构造函数
50.关于友元,下面说法中正确的是(A)。
A.一个类的成员函数可以说明为另一个类的友元
B.当一个类说明为另一个类的友元时,这个类中的第一个成员可以访问另一个类
C.如果类A是类B的友元,类B又是类C的友元,则类A是类C的友元
D.如果类A是类B的友元,类B也是类A的友元
二、填空题
1.在面向对象的程序设计中,将一类对象的公共性质进行数据抽象和行为抽象,然后将抽象得到的数据和行为进行封装,形成了_类,它的实例称为_对象。
2.C++基本数据类型中,布尔类型只有两个值false和true。
3.函数形参和实参结合的方式有值调用、传地址调用、引用调用,其中,传地址调用方式和引用调用方式形参的改变能引起实参的改变。
4.默认形参值必须按照___从右向左的顺序声明。
5.在C++程序中,同名函数如果形参的参数类型或个数不同,可以重载。
6.面向对象程序设计主要的特性是_封装、_继承和抽象性、_多态。
7.在面向对象的程序设计中,把对象的一组属性和操作组装在一起,形成一个独立的实体,体现了面向对象方法的_封装特征;而同一个消息被不同类型的对象接收时产生不同的行为,体现的是面向对象方法的_多态特征。
8.C++中定义“类”的关键字是_class__。
9.类的访问权限共有三种,分别为public_、private_和protected。
类中被说明为_public__访问权限的成员,可以被该类的对象访问到。
private__访问权限和protected__访问权限的成员,类外的函数和对象不能访问。
10.类的构造函数的函数名与_类名相同。
类的析构函数的函数名与_相同。
11.C++中动态内存分配的的操作符是。
运算符用于撤销由new建立的对象,释放对象指针所指向的内存空间。
12.一个类继承自多个父类,称为多继承。
13.在类中,使用static关键字进行静态成员的声明。
友元函数是用关键字friend__修饰的成员函数。
C++中使用关键字const__定义符号常量。
14.基类中被说明为_private__的成员只能被其派生类的成员函数访问,不能被外界函数访问。
带有纯虚函数的类是抽象类。
15.常用的C++标准输入输出流对象是cin和cout。
16.类的构造函数的函数名与类名相同。
17.在类中,使用static关键字进行静态成员的声明。
18.常用的C++标准输入输出流对象是cin和cout。
19.一个完整程序中必须有一个名为main的函数。
20.在C++的一个程序中可以定义多个同名的函数,称为重载。
21.友元函数是用关键字_friend__修饰的成员函数。
22.在面向对象的程序设计中,将一类对象的公共性质进行数据抽象和行为抽象,然后将抽象得到的数据和行为进行封装,形成了_类,它的实例称为_对象。
23.面向对象程序设计主要的特性是封装性、继承和多态、抽象性。
24.一个完整程序中必须有一个名为mian的函数。
25.在C++的一个程序中可以定义多个同名的函数,称为重载。
26.在一个函数的定义或声明前加上关键字inline,该函数就声明为内联函数。
27.在C++中,类成员有3种访问权限,其中public成员提供给用户的接口功能。
28.被声明为const的数据成员只允许声明为的成员函数访问。
29.在类的派生与继承中,可以中断派生链的继承方式是私有继承。
30.在面向对象的程序设计中,将一类对象的公共性质进行数据抽象和行为抽象,然后将抽象得到的数据和行为进行封装,形成了_类,它的实例称为_对象。
三、判断题
1.在C++中,标识符Max和MAX是一样的。
×
2.被定义为bool类型的变量,取值即为真或假。
√
3.对象是属性和行为的封装体。
×
4.在C++语言中,使用struct(结构体)定义的类与使用class定义的类是一样的。
5.如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的私有成员。
×
6.构造函数和析构函数都不能重载。
×
7.派生类是从基类派生出来,它不能再生成新的派生类。
×
8.派生类的继承方式中有两种:
公有继承和私有继承。
×
9.在私有继承中,基类中所有成员对派生类都是不可见的。
×
10.参数个数和类型都相同的函数也可以重载。
×
11.C++中标识符内的大小写字母是没有区别的。
×
12.C++中只能使用注释符号(//),不能使用注释符号(/*…*/)。
×
13.常量87.363的数据类型是float。
√
14.引用是某个变量的别名,对引用的操作就是对被引用变量的操作。
√
15.同一程序中局部变量和全局变量不可以同名。
×
16.在C++程序中,循环体中可以出现break语句或continue语句。
√
17.switch语句中可以没有default子句。
×
18.没用参数的两个函数是不能重载的。
√
19.使用关键字class定义的类中缺省的访问权限是私有(private)的。
√
20.返回值类型、参数个数和类型都相同的函数也可以重载。
×
21.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。
×
22.构造函数可以声明为虚函数。
×
23.析构函数是一种函数体为空的成员函数。
×
24.构造函数和析构函数都不能重载。
×
25.可以在类的构造函数中对静态数据成员进行初始化。
×
26.一个函数功能不太复杂,但被频繁调用,可以声明为内联函数。
√
27.类的访问权限主要有public、protected和private。
√
28.类的构造函数名与类名相同。
√
29.类的析构函数名与类名相同。
×
30.保护继承方式下基类的保护成员在派生类中仍是保护成员。
√
四、程序题
1.填空完成下面对Point类的定义。
Class___①__Point//声明Point类
{
public:
Point(intxx=0,intyy=0){X=xx;Y=yy;}
Point(Point&p);//复制构造函数
intGetX(){returnX;}
intGetY(){returnY;}
Private___②__:
intX,Y;//X,Y为私有成员
};
2.填空完成下面对Time类的定义。
_class__①__Time//声明Time类
{
_public__②__:
voidsetTime(inth,intm,ints)//setTime()为公有的成员函数
{hour=h;minute=m;second=s}
voidshowTime()
{
cout<”<”<}
private:
inthour,minute,second;//hour,minute,second为私有成员
};
3.填空完成下面对Time类的定义。
classTime//声明Time类
{
_public__①__:
voidsetTime(inth,intm,ints)//setTime()为公有的成员函数
{hour=h;minute=m;second=s}
voidshowTime()
{
cout<”<”<}
_private__②__:
inthour,minute,second;//hour,minute,second为私有成员
};
4.定义一个时钟类Clock,有私有数据成员:
时(hour)、分(minute)、秒(second),有公有成员函数setTime()实现对时钟的设置,以及公有成员函数showTime()实现时间的输出。
class__Clock//声明clock类
{
_public__:
voidsetTime(inth,intm,ints)//setTime()为公有的成员函数
{hour=h;minute=m;second=s}
voidshowTime()
{
cout<”<”<}
private:
inthour,minute,second;//hour,minute,second为私有成员
};
5.有如下程序
classBase{
protected:
Base(){cout<<'A';}
Base(charc){cout<};
classDerived:
publicBase{
public:
Derived(charc){cout<};
voidmain(){
Derivedd1('B');
}
执行这个程序屏幕上将显示输出___c___。
6.有如下代码
classBase{
private:
voidfun1()const{cout<<"fun1";}
protected:
voidfun2()const{cout<<"fun2";}
public:
voidfun3()const{cout<<"fun3";}
};
classDerived:
protectedBase{
private:
voidfun4()const{cout<<"fun4";}
public:
voidfun(){
fun1();//①
fun2();//②
fun3();//③
fun4();//④
}
};
其中有语法错误的语句是______。
7.定义一个哺乳动物类Mammal,有私有数据成员age,有公有成员函数SetAge()和GetAge()实现age的赋值和输出。
要求代码书写规范。
8.定义一个类Score,它包含私有数据成员english_score(英语分数),公有成员函数setScore()和printScore(),其中,setScore()用来设置english_score的值,printScore()用来输出english_score的值。
在主程序中定义类Score的两个对象stu1和stu2,其英语成绩分别为80.5和90.5。
9.声明一个Dog类,包含age、weight等属性,以及对这些属性操作的方法。
实现并测试这个类。
10.定义一个Circle类,有数据成员radius(半径),成员函数getArea(),计算圆的面积,构造一个Circle的对象进行测试。
#include
usingnamespacestd;
constdoublePI=3.14159265;
classcircle
{public:
circle(doubler){radius=r;}
virtualdoublearea(){return0.0;}
virtualdoublevolume(){return0.0;}
protected:
doubleradius;
};
classcolumn:
publiccircle
{public:
column(doubler,doubleh):
circle(r)
doublearea()
{returnPI*radius*radius;}
};
intmain()
{circle*p;
p=&cobj;
cout<<"圆:
"<