【C++复习题】
一、单选题
1.C++语言对c语言做了很多改进,c++语言相对于C语言的最根本的变化是( A )
A. 增加了一些新的运算符
B. 允许函数重载,并允许设置缺省参数
C. 规定函数说明符必须用原型
D. 引进了类和对象的概念
2.下列哪个是c++语言的有效标识符? ( A )
A. -N01 B. No.1 C. 12345 D. int
3.下面程序的运行结果为( C )
#include<iostream.h>
void main()
{
for(int a=0,x=0;!x &&a<=10;a++)
{ a++;
}
cout<<a<<endl;
}
A. 10 B. 11 C. 12 D. 0
4.下列选项,不正确的是( B )
A. for(int a=1;a<=10;a++);
B. int a=1;do { a++: }while(a<=10)
C. int a=1;while(a<=10) { a++; }
D. for(int a=1;a<=10;a++)a++;
5.下列程序的输出结果为( B )
#include<iostream.h>
void main()
{
char*a[]={"hello","the","world"};
char **pa=a;
pa++;
cout << *pa << endl;
}
A. hello B. the C. world D. hellotheworld
6.决定C++语言中函数的返回值类型的是( D )
A. return语句中的表达式类型
B. 调用该函数时系统随机产生的类型
C. 调用该函数时的主调用函数类型
D. 在定义该函数时所指定的数据类型
7.下列程序的输出结果是( B )
#include<iostream.h>
intmin(int a,int B)
{ if(a<B) return a;
else return B;
return 0;
}
voidmain()
{ cout<<min(1,min(2,3))<<endl;
}
A. 0 B.1 C. 2 D. 3
8.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( D )
A. 公有类型 B. 私有类型 C. 保护类型 D. 友元类型
9.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是( C )
A. 友元函数 B. 虚函数 C. 构造函数 D. 析构函数
10.类的析构函数的作用是( D )
A. 一般成员函数的初始化 B. 类的初始化
C. 对象的初始化 D.对象生存器结束时作些清理工作
11.下列说法正确的是( B )
A..内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B. 内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C. 类的内联函数必须在类体内定义
D. 类的内联函数必须在类体外通过加关键字inline定义
12.下面对静态数据成员的描述中,正确的是( D )
A. 静态数据成员可以在类体内进行初始化
B. 静态数据成员不可以被类的对象调用
C. 静态数据成员不能受private控制符的作用
D. 静态数据成员可以直接用类名调用
13.下面对于友元函数描述正确的是( C )
A. 友元函数的实现必须在类的内部定义
B. 友元函数是类的成员函数
C. 友元函数破坏了类的封装性和隐藏性
D. 友元函数不能访问类的私有成员
14.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( C )
A. 派生类的对象可以赋给基类的对象
B. 派生类的对象可以初始化基类的引用
C. 派生类的对象可以直接访问基类中的成员
D. 派生类的对象的地址可以赋给指向基类的指针
15.下列关于虚基类的描述,错误的是( B )
A. 设置虚基类的目的是为了消除二义性
B. 虚基类的构造函数在非虚基类之后调用
C. 若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用
D. 若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数
16.下列关于多态性的描述,错误的是( C )
A. C++语言的多态性分为编译时的多态性和运行时的多态性
B. 编译时的多态性可通过函数重载实现
C. 运行时的多态性可通过模板和虚函数实现
D. 实现运行时多态性的机制称为动态绑定
17.下列运算符中,在C++语言中不能重载的是( C )
A. ++ B. >= C. :: D./
18.下面关于类和对象的描述中,错误的是( A )
A. 类就是c语言中的结构体类型,对象就是C语言中的结构体变量
B. 类和对象之间的关系是抽象和具体的关系
C. 对象是类的实例,一个对象必须属于一个已知的类
D. 类是具有共同行为的若干对象的统一描述体
19.下面关于break语句的描述中,不正确的是( D )
A. break可以用于循环体内
B. break语句可以在for循环语句中出现多次
C. break语句可以在switch语句中出现多次
D. break语句可用于if条件判断语句内
20.下面关于数组的描述错误的是( D )
A. 在c++语言中数组的名字就是指向该数组第一个元素的指针
B. 长度为n的数组,下标的范围是0一n-l
C. 数组的大小必须在编译时确定
D. 数组只能通过值参数和引用参数两种方式传递给函数
21.下面程序错误的语句是( B )
①#include<iostream.h>
②void main()
③{
④ int *p=new int[1];
⑤ p=9;
⑥ cout << *p<<endl;
⑦ delete[] p;
⑧}
A. ④ B. ⑤ c. ⑥ D. ⑦
22.下面的哪个选项不能作为函数的返回类型?( C )
A. void B. int C. new D. long
23.下列程序的输出结果为( D )
#include<iostream.h>
int func(int n)
{
if(n<1)return 1;else return n+func(n-1);
return 0;
}
void main()
{
cout<<func(5)<<endl;
}
A. 0 B. 10 C. 15 D. 16
24.在C++语言中,数据封装要解决的问题是( D )
A. 数据的规范化 B. 便于数据转换
C. 避免数据丢失 D. 防止不同模块之间数据的非法访问
25.对类的构造函数和析构函数描述正确的是( A )
A. 构造函数可以重载,析构函数不能重载
B. 构造函数不能重载,析构函数可以重载
c. 构造函数可以重载,析构函数也可以重载
D. 构造函数不能重载,析构函数也不能重载
26.下面对静态数据成员的描述中,正确的是(A)
A. 静态数据成员是类的所有对象共享的数据
B. 类的每个对象都有自己的静态数据成员
C. 类的不同对象有不同的静态数据成员值
D. 静态数据成员不能通过类的对象调用
27.如果类A被说明成类B的友元,则(D)
A. 类A的成员即类B的成员
B. 类B的成员即类A的成员
C. 类A的成员函数不得访问类B的成员
D. 类B不一定是类A的友元
28.下面关于虚函数的描述,错误的是(B)
A. 在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数
B. 基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数
C. 虚函数可以是另一个类的友元函数,但不能是静态成员函数
D. 基类中说明的纯虚函数在其任何派生类中都必须实现
29.下面程序的运行结果是( C )
#include<iostream.h>
void main()
{
int num=1;
int &ref=num;
ref=ref+2;
cout<<num;
num=num+3;
cout<<ref<<endl;
}
A. 13 B. 16 C. 36 D. 33
30.下面关于c++语言的描述错误的是( B )
A. C++语言支持数据封装 B. C++语言中引入友元没有破坏封装性
C. C++语言允许函数名和运算符重载 D. C++语言支持动态联编
31.下列程序的运行结果为( B )
#include<iostream.h>
void main()
{
int a=2;
int b=a+1;
cout <<a/b<<endl;
}
A. 1 B. 0 C. 0.7 D. 1…
32.设inta=1,b=2;,则(a++)+b和a+++b这两个表达式的值分别为( A )
A. 3,3 B. 3,4 C. 4,3 D. 4,4
33.下面程序的运行结果为( D )
#include<iostream.h>
void main()
{ char a='3';
switch(a)
{
case'3':cout<<"3";
case'2':cout<<"2";break;
default:cout<<"1";
}
}
A. 3 B. 321 C. 31 D. 32
34.存在定义inta[10],x,*pa;,若pa=&a[0],下列的哪个选项和其他3个选项不是等价的?( A )
A. x=*pa; B. x=*(a+1); C. x=*(pa+1); D. x=a[1];
35.下面程序的运行结果为 ( D )
#include<iostream.h>
void swap(int &a,int b)
{ int temp;
temp=a++;
a=b;b=temp;
}
void main()
{ int a=2,b=3;swap(a,b);
cout << a << ","<<b <<endl;
}
A. 2,3 B. 3,2 C. 2,2 D. 3,3
36.下面关于C++语言变量的叙述错误的是( B )
A. 在C++语言中变量分为auto,static,extern和register四种存储类型
B. 自动变量和外部变量的作用域为整个程序
C. 内部静态变量的作用域是定义它的函数
D. 外部静态变量的作用域是定义它的文件
37.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为( A )
A. public B. protected C. private D. static
38.在C++语言程序中,对象之间的相互通信通过( C )
A. 继承实现 B. 调用成员函数实现
C. 封装实现 D. 函数重载实现
39.类的析构函数是在什么时候调用的?( C )
A. 类创建时 B. 创建对象时 C. 删除对象时 D. 不自动调用
40.通常拷贝构造函数的参数是( C )
A. 某个对象名 B. 某个对象的成员名
C. 某个对象的引用名 D. 某个对象的指针名
41.在C++语言类体系中,不能被派生类继承的有( B )
A. 转换函数 B. 构造函数 C. 虚函数 D. 静态成员函数
42.
试题内容:对于类定义, 下面正确的叙述是( C ) class A{ public: virtual void funcl(){} void func2(){} }; class B:public A { public: void funcl(){cout<<”class B func 1”<<endl;} viauM void func2(){cout<<”class B func 2”<<endl;} }; A. A::func2()和B::funcl()都是虚函数 B. A::func2()和B::funcl()都不是虚函数 C. B::funcl()是虚函数,而A::func2()不是虚函数 D. B::funcl()不是虚函数,而A::fune2()是虚函数 |
43.与语句cout<<endl;不等价的是(D )
A. cout<<’n’; B. cout<<’12’; C. cout<<’xA’; D. cout<<’\0’;
44.下面程序的运行结果是( C )
#include<iostream.h>
void main()
{
int i=1;
while(i<=8)
if(++i%3!=2) continue;
else cout << i;
}
A. 25 B.36 C. 258 D. 369
45.已知有定义,则下列选项错误的是( B )
constint D=5;
inti=1;
doublef=0.32;
charc=15;
A. ++i; B. D--; C. c++; D. --f
46.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是( B )
#include<iostream.h>
void main()
{
int i=0,j,k;
do{i++;k=316-13*i;}
while( );
j=k/11;
cout <<"316=13*"<< i << "+11*"<< j;
}
A. k/11 B. k%11 C. k/11==0 D. k%11==0
47.设有数组定义:char array[]=”China”;,则数组array所占的空间为(C )
A. 4个字节 B. 5个字节 C. 6个字节 D. 7个字节
48.下列描述中哪个是正确的?( B )
A. 私有派生的子类无法访问父类的成员
B. 类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的
C. 私有派生类不能作为基类派生子类
D. 私有派生类的所有子孙类将无法继续继承该类的成员
49.下列关于构造函数说法不正确的是( C )
A. 构造函数必须与类同名
B. 构造函数可以省略不写
C. 构造函数必须有返回值
D. 在构造函数中可以对类中的成员进行初始化
50.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是( D )
A. 一元运算符 B. 二元运算符
C. 选项A)和选项B)都可能 D. 重载错误
二、填空题
1.在面向对象的程序设计中,类描述的是具有相似性质的一组 ________________。
正确答案:对象
2.继承的方式有公有继承、______________和______________3种。
正确答案:私有继承、保护继承
3.对于下面定义的类MyClass,请在函数f()中添加语句把n的值修改为50。
class MyClass
{ public:
MyClass(int x){n=x;}
void SetNum(int n1){n=nl;}
private:intn;
};
void f()
{ MyClass *ptr=new MyClass(45);
______________
}
正确答案:ptr->SetNum(50)
4.在面向对象方法中,类之间共享属性和操作的机制称为______________。
正确答案:继承
5.假设inta=1,b=2;则表达式a+++--b的值为______________。
正确答案:2
6.通过使用new和delete两个运算符进行的分配为______________分配。
正确答案:动态存储
7.下面程序的运行结果为______________。
#include<iostream.h>
void fun(intx=0,int y=0)
{
cout<<x<<y;
}
void main()
{
fun(5);
}
正确答案:50
8.重载的运算符保持其原有的______________、优先级和结合性不变。
正确答案:操作数个数
9.cout.put(’A’);,还可以表示为______________。
正确答案:cout<< ’A’
10.在C++中封装性、继承性和______________是面向对象思想的主要特征。
正确答案:多态性
11.下面程序的结果为______________。
#include<iostream.h>
void main()
{
int a=1,b=2;
bool c=1;
if((a>b)|| c) cout<<"true"<<endl;
else
cout <<"false"<<endl;
}
正确答案:true
12.MFC框架程序是从______________函数开始执行的。
正确答案:WinMain
13.假定A为一个类,则语句A(A &p);为该类______________函数的原型说明。
正确答案:拷贝构造
14.派生类构造函数的执行顺序是先执行______________的构造函数,再执行______________的构造函数。
正确答案:基类、派生类
15.派生类的成员一般分为两部分,一部分是______________,另一部分是自己定义的新成员。
正确答案:从基类继承的成员
16.如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是______________。
正确答案:friend void A();
17.消息惟一定义了一个______________。一个消息由一个消息______________(UINT)和两个参数(WPARAM,LPARAM)组成。
正确答案:事件、名称
18.窗口是由应用程序创建的屏幕上的一个______________区域。窗口一般由客户区和______________组成。
正确答案:矩形、非客户区
19.句柄是标识诸如窗口、菜单、图标、内存块、输出设备等______________的数值。Windows系统的各种______________都是通过句柄来访问的。
正确答案:对象、资源
20.MFC(MicrosoftFoundation Classes)是一种______________的框架,以C++形式封装了大部分的______________、定义了应用程序的基本结构和执行结构。
正确答案:应用程序、Windows API,
21.消息映射是将______________和______________函数联系起来的机制。
正确答案:消息、消息处理
22.GDI是______________的英文单词首字母缩写,组成了Windows操作系统的核心部分。GDI提供高层绘图函数,支持与______________无关的图形显示。
正确答案:图形设备界面、设备
23.对话框有两种类型,______________对话框和______________对话框。
正确答案:模式、非模式
24.对话框通常作为一个______________,包含各种______________,用以显示消息和取得用户数据。
正确答案:容器、控件
25.控件是应用程序用于______________和______________的子窗口。
正确答案:输入、输出
26.文档和视图结构构成了MFC框架应用程序的核心。其中文档类用于______________数据,视图类用于______________数据。
正确答案:存储、显示
27.单文档应用程序只使用一个文档对象,当选择菜单项“______________”→“ ______________”时,不会重新创建一个新文档对象,只是重新初始化文档对象的数据成员。
正确答案:文件、新建
28.应用程序类由_____________类派生,应用程序类封装了程序的初始化、运行和结束等功能。
正确答案:CWinApp
29.多文档类用于存放文档数据并完成文件I/O,为每个打开的文档生成这个类的一个_____________,而不是_____________同一对象。
正确答案:对象、共用
30.基于对话框的应用程序的基本结构由2个派生类组成,_____________类和_____________类。
正确答案:应用程序、对话框
查看评论 回复