C++复习题库+C++试题库
C++习题
1.下列字符列中,可作为C++语言程序自定义标识符是()。
A.switch
B.file
C.break
D.do
2.运算符 +、<=、=、% 中,优先级最低的运算符是()。
A. +
B.<=
C.=
D.%
3.设变量m,n,a,b,c,d均为0,执行(m = a==b)||(n=c==d)后,m,n的值是()。
A.0,0
B. 0,1
C. 1,0
D. 1,1
4. 字符串”vm\x43\\\np\102qu”的长度是()。
A. 8
B. 9
C. 16
D. 17
5.设有代码“int a = 6;”,则执行了语句“a + = a - = a*a;”后,变量a的值是()。
A.0
B. -24
C. -40
D. –60
6. void main()
{ int x=-1;
do
{x=x*x;}
while(!x);}
下列说法正确的是()。
A.是死循环 B.循环执行两次
C.循环执行一次 D.有语法错误
7.下面有关for循环的正确描述是()。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判断表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来
8.下面程序段()。
x=3;
do
{y=x--;
if(!y) {cout<<”x”; continue;}
cout<<”#”;}
while(1<=x<=2);(1<=x) = 1,0 bool 型
A.将输出## B.将输出##*
C.是死循环 D.含有不合法的控制表达式
9.以下正确的说法是()。
A.用户若需要调用标准函数,调用前必须重新定义
B.用户可以直接调用所有标准库函数
C.用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数
D.用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数
10.在参数传递过程中,对形参和实参的要求是()。
A.函数定义时,形参一直占用存储空间
B.实参可以是常量、变量或表达式
C.形参可以是常量、变量或表达式
D.形参和实参类型和个数都可以不同
11.对数组名作函数的参数,下面描述正确的是()。
A.数组名作函数的参数,调用时将实参数组复制给形参数组
B.数组名作函数的参数,主调函数和被调函数共用一段存储单元
C.数组名作参数时,形参定义的数组长度不能省略
D.数组名作参数,不能改变主调函数中的数据
12. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的
正确引用(其中0≤i<10)。
A.p[i] B.*(*(a+i)) C.a[p-a] D.*(&a[i])
13.以下程序的输出结果是( )。
#include
void main()
{ char s[]="12134211",*p;
int v1=0,v2=0,v3=0,v4=0; v1 v2 v3 v4
for (p=s;*p;p++) 2 4 3 4
switch(*p)
{
case '1':v1++;
case '3':v3++;
case '2':v2++;
default: v4++;
}
cout< } A.4,2,1,1 B.4,7,5,8 C.7,3,2,1 D.8,8,8,8 14. 下列声明结构体变量错误的是()。 A.struct student B. struct student { int no; { int no; char name[16]; char name[16]; } st1,st2; }; struct student st1,st2; C.struct student D. struct student { int no; { int no; char name[16]; char name[16]; } ; }; struct st1,st2; student st1,st2; 15. 对类的构造函数和析构函数描述正确的是()。 A.构造函数可以重载,析构函数不能重载 B.构造函数不能重载,析构函数可以重载 C.构造函数可以重载,析构函数也可以重载 D.构造函数不能重载,析构函数也不能重载 16. 下面对于友元函数描述正确的是()。 A.友元函数的实现必须在类的内部定义 B.友元函数是类的成员 C.友元函数破坏了类的封装性和隐藏性 D.友元函数不能访问类的私有成员17. 派生类的对象对它的基类成员中()是可以访问的。 A.公有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.私有继承的公有成员 18. C++类体系中,不能被派生类继承的有()。 A.构造函数 B.虚函数 C.静态成员函数 D.赋值操作函数19.以下()成员函数表示虚函数。 A.virtual int vf(int); B.void vf(int)=0; C.virtual void vf()=0; D.virtual void vf(int) { }; 20. 下面对静态数据成员的描述中,正确的是()。 A.静态数据成员可以在类体内进行初始化 B.静态数据成员不可以在类体内进行初始化 C.静态数据成员不能受private控制符的作用 D.静态数据成员可以直接用类名调用?? 21. 继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。 A.规律性 B.传递性 C.重复性 D.多样性 22.若有以下定义,则释放指针所指内存空间的操作是 ( )。 float r=news float[10]; A.delete r ; B.delete *r; C.delete []r; D.delete r[]; 23.若有以下定义,则对字符串的操作错误的是( )。 char s[10]=”Program”,t[]=”test”; A.strcpy(s,t); B.cout< C.strcat(“this”,t); D.cin>>t; 24.在if语句中的表达式是( )。 A.只能是表达式 B.只能是关系表达式和逻辑表达式 C.只能是逻辑表达式 D.可以是任意表达式 25.在用关键字class定义的类中,以下叙述正确的是( )。 A.在类中,不作特别说明的数据成员均为私有类型 B.在类中,不作特别说明的数据成员均为公有类型 C.类成员的定义必须是成员变量定义在前,成员函数定义在后 D.类的成员定义必须放在类定义体内部 公共基础知识 一、选择题 (1)下列关于栈的叙述正确的是 A)栈是非线性结构B)栈是一种树状结构 C)栈具有先进先出的特征D)栈具有后进先出的特征 (2)结构化程序设计所规定的三种基本控制结构是 A)输入、处理、输出B)树形、网形、环形 C)顺序、选择、循环D)主程序、子程序、函数 (3)结构化程序设计的一种基本方法是 A)筛选法B)递归法C)归纳法D)逐步求精法 (4)如果对一个关系实施了一种关系运算后得到了一个新的关系,而且新的关系中属性个数少于原来关系中属性个数,这说明所实施的运算关系是: A)选择B)投影C)连接D)并 一:选择题: (1) D (2) C(3) D (4) B C++语言程序设计 一、选择题 (1)C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是() A)面向过程B)面向对象C)安全性D)复用性 (2)C++语言的跳转语句中,对于break和continue说法正确的是() A)break语句只应用与循环体中 B)continue语句只应用与循环体中 C)break是无条件跳转语句,continue不是 D)break和continue的跳转范围不够明确,容易产生问题 (3)for(int x=0,y=o;!x& &y<=5;y++)语句执行循环的次数是() A)0B)5C)6D)无次数 (4)考虑函数原型void test(int a,int b=7,char="*"),下面的函数调用中,属于不合法调用的是() A)test(5); B)test(5,8); C)test(6,"#") D)test(0,0."*"); (5)下面有关重载函数的说法中正确的是() A)重载函数必须具有不同的返回值类型;B)重载函数形参个数必须不同; C)重载函数必须有不同的形参列表D)重载函数名可以不同; (6)下列关于构造函数的描述中,错误的是() A)构造函数可以设置默认参数;B)构造函数在定义类对象时自动执行 C)构造函数可以是内联函数;D)构造函数不可以重载 (7)下面描述中,表达错误的是() A)公有继承时基类中的public成员在派生类中仍是public的 B)公有继承是基类中的private成员在派生类中仍是private的 C)公有继承时基类中的protected成员在派生类中仍是protected的 D)私有继承时基类中的public成员在派生类中是private的 (8)应在下列程序划线处填入的正确语句是() #include class Base { public: void fun(){cout<<"Base::fun"< }; class Derived:public Base { void fun() {_____________ file://显示调用基类的函数fun() cout<<"Derived::fun"< } }; A)fun(); B)Base.fun(); C)Base::fun(); D) Base->fun(); (9)有如下程序: #include class BASE{ char c; public: BASE(char n):c(n){} virtual~BASE(){cout< c }; class DERIVED:public BASE{ char c; public: DERIVED(char n):BASE(n+1),c(n){} ~DERIVED(){cout< c }; int main() { DERIVED("X"); return 0; } 执行上面的程序将输出() A)XY B)YX C)X D)Y (10)在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是() A)fail B)eof C)bad D)good 一:选择题 1-5 :B B C C C 6-10:D B C A B 1、下列有关类的说法不正确的是()。 A.对象是类的一个实例 B.任何一个对象只能属于一个具体的类 C.一个类只能有一个对象 D.类与对象的关系和数据类型与变量的关系相似 答案:C 分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。 2、下面()项是对构造函数和析构函数的正确定义。 A.void X::X(), void X::~X() B.X::X(参数), X::~X() C.X::X(参数), X::~X(参数) D.void X::X(参数), void X::~X(参数) 答案:B 分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。 3、()的功能是对象进行初始化。 A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数 答案:C 分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作; 4、下列表达方式正确的是()。 A.class P{ B. class P{ public: public: int x=15; int x; void show(){cout< }; } C. class P{ D. class P{ int f; public: }; int a; f=25; void Seta (int x) {a=x;}; 答案:D 分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。 5、拷贝构造函数具有的下列特点中,()是错误的。 A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的 B.拷贝构造函数只有一个参数,并且是该类对象的引用 贝构造函数是一种成员函数 拷贝构造函数的名字不能用类名 分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。 6、关于静态成员的描述中,()是错误的。 A.静态成员可分为静态数据成员和静态成员函数 B.静态数据成员定义后必须在类体内进行初始化 C.静态数据成员初始化不使用其构造函数 D.静态数据成员函数中不能直接引用非静态成员 答案:B 分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。 7:关于友元的描述中,()是错误的。 A.友元函数是成员函数,它被说明在类体内 B.友元函数可直接访问类中的私有成员 C.友元函数破坏封装性,使用时尽量少用 D.友元类中的所有成员函数都是友元函数 答案:A 8、;对类的构造函数和析构函数描述正确的是()。 A.构造函数可以重载,析构函数不能重载 B.构造函数不能重载,析构函数可以重载 C.构造函数可以重载,析构函数也可以重载 D.构造函数不能重载,析构函数也不能重载 答案:A 9、类的析构函数的作用是()。 A.一般成员函数 B.类的初始化 C.对象初始化 D.删除对象 答案:D 10、假设OneClass为一个类,则该类的拷贝初始化构造函数的声明语句为()。 A.OneClass(OneClass p); B. OneClass& (OneClass p); C. OneClass(OneClass & p); D. OneClass (OneClass *p); 答案:C 11、为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。 A.public B. protected C.private D. static 答案:A 12、下面对静态数据成员的描述中,正确的是()。 A.静态数据成员可以在类体内进行初始化 B.静态数据成员不可以在类体内进行初始化 C.静态数据成员不能受private控制符的作用 D.静态数据成员可以直接用类名调用 答案:B 13、下面对静态数据成员的描述中,正确的是()。 A.静态数据成员是类的所有对象共享的数据 B.类的每一个对象都有自己的静态数据成员 C.类的不同对象有不同的静态数据成员值 D.静态数据成员不能通过类的对象调用 答案:A C++试题1 (1) 已知下列语句中的x和y都是int型变量,其中不正确的语句是 A) y+=++x; B) ++x+=y; C) y=x++; D) x++=y; (2) 若x是一个bool型变量,y是一个值为100的int型变量,则表达式!x && y>0 的值[ ]。 A) 为true B) 为false C) 与x的值相同D) 与x的值相反 (3) 执行语句序列 int n; cin>>n; switch(n){ case 1: case 2: cout<<'X'; case 3: case 4: cout<<'Y'; break; default:cout<<'Z'; } 时,不可能出现的情况是[ ]。 A) 显示:X B) 显示:Y C) 显示:Z D) 显示:XY (4) 执行语句序列 int x; cin>>x; if(x>250) cout<<'X'; if(x<250) cout<<'Y'; else cout<<'X'; 时,不可能出现的情况是[ ]。 A) 显示:X B) 显示:Y C) 显示:XY D) 显示:XX (5) 要定义一个具有5个元素的一维数组,并使其各元素的初值依次是30,50,-88,0和0,则下列定义语句中不正确的是[ ]。 A) int vect[]={30,50,-88}; B) int vect[]={30,50,-88,0,0}; C) int vect[5]={30,50,-88}; D) int vect[5]={30,50,-88,0,0}; (6) 已知某应用系统中已经定义了函数fun,其原形是int fun(char='A'); 则下列函数中,可以在同一系统中加以重载的是[ ]。 A) int fun(); B) int fun(char); C) int fun(char,int); D) int fun(char,double=0.0); (7) 若指针p定义为const char *p="Luchy!"; 则[ ]。 A) p所指向的数据不可改变,p在定义时可以不初始化。 B) p所指向的数据不可改变,p在定义时必须初始化。 C) p本身不可改变,p在定义时可以不初始化。 D) p本身不可改变,p在定义时必须初始化。 (8) 已知数组A和指针p定义为:int A[20][10],*p;,要使p指向A的首元素,正确的赋值表达式是[ ]。 A) p=&A 或p=A[0][0] B) p=A 或p=&A[0][0] C) p=&A[0] 或p=A[0][0] D) p=A[0] 或p=&A[0][0] (9) 已知函数func的原形是 double func(doouble *pd,int &ri); 变量x和y的定义是 double x; int y; 把x和y分别作为第一参数和第二参数来调用函数func,正确的调用语句是[ ]。 A) func(x,&y); B) func(&x,y); C) func(&x,&y); D) func(x,y); (10) 要使字符串变量str具有初值"Lucky",正确的定义语句是[ ]。 A) char str[]={'L','u','c','k','y'}; B) char str[5]={'L','u','c','k','y'}; C) char str []="Lucky"; D) char str [5]="Lucky"; (11) 已知某函数的一个形式参数被说明为MAT[3][10],在下列说明中,与此等效的形参说明是[ ]。 A) int MAT[][10] B) int MAT[3][] C) int MAT[10][3] D) int MAT[][] (12) 若指针p定义为char * ="Luchy!"; 则[ ]。 A) p所指向的数据不可改变,p在定义时可以不初始化。 B) p所指向的数据不可改变,p在定义时必须初始化。 C) p本身不可改变,p在定义时可以不初始化。 D) p本身不可改变,p在定义时必须初始化。 (13) 在下列表达式中,与下标引用A[i][j]不等效的是[ ]。 A) *(A+i+j) B) *(A[i]+j) C) *(*(A+i)+j) D) (*(A+i))[j] (14) 要使语句p=new double[20];能够正常执行,变量p应定义为[ ]。 A) double p[20]; B) double p; C) double (*p)[20]; D) double *p; (15) 执行下列语句序列 struct AA{ int ival; char cval;}; struct BB{ int ival; AA ra;}; struct CC{ int ival; AA ra; BB rb;}; CC rc={66,{rc.ival+1,rc.ra.ival+1},{69,{70,71}}}; cout< 后,显示在屏幕上的是[ ]。 A) 66,67,68 B) 67,68,69 C) 66,67,70 D) 67,69,70 (16) 类的默认的无参构造函数[ ]。 A) 在任何情况下都存在 B) 仅当未定义无参构造函数时存在 C) 仅当未定义有参构造函数时存在 D) 仅当未定义任何构造函数时存在 (17) 语句ofstream f("SALARY.DAT",ios::noreplace | ios::binary); 的功能是建立流对象f,并试图打开文件SALARY.DAT并与之连接,而且[ ]。 A) 若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件。 B) 若文件存在,将其截为空文件;若文件不存在,打开失败。 C) 若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件。 D) 若文件存在,打开失败;若文件不存在,建立一个新文件。 (18) 执行下列语句序列 struct AA{ int ival; char cval;}; struct BB{ int ival; AA ra;}; struct CC{ int ival; AA *ra; BB rb;}; CC rc={66,new AA,{69,{70,71}}}; rc.ra->ival=rc.ival+1; rc.ra->cval=rc.ra->ival+1; cout< 后,显示在屏幕上的是[ ]。 A) 67,69,70 B) 66,67,70 C) 67,68,69 D) 66,67,68 (19) 类的默认的拷贝构造函数[ ]。 A) 在任何情况下都存在 B) 仅当未定义拷贝构造函数时存在 C) 仅当未定义有参构造函数时存在 D) 仅当未定义任何构造函数时存在 (20) 语句ofstream f("SALARY.DAT",ios::nocreate | ios::trunc); 的功能是建立流对象f,并试图打开文件SALARY.DAT并与之连接,而且[ ]。 A) 若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件。 B) 若文件存在,将其截为空文件;若文件不存在,打开失败。 C) 若文件存在,将文件指针定位于文件首;若文件不存在,建立一个新文件。 D) 若文件存在,打开失败;若文件不存在,建立一个新文件。 答案:1~5:DDACA 6~10:CADBC 11~15:ADADC 16~20:DDBBB C++试题2 1.下列变量名中,()是合法的。 A.56A B._abc C.d-Ptr D.while 2.下列各种运算符中,()优先级最高。 A. + B.&& C.== D.*= 3.设变量m,n,a,b,c,d均为0,执行(m = a==b)&&(n=c==d)后,m,n的值是()。 A.0,0 B. 0,1 C. 1,0 D. 1,1 4. 字符串”\t\v\\\0which\n”的长度是()。 A. 4 B. 10 C. 9 D. 字符串有非法字符,输出值不确定 5. 设a=2,b=3,c=2;计算a+=b*=(++b-c++)中a、b、c的值()。 A.8、6、2 B. 2、4、2 C.10、8、3 D. 5、3、3 6. 已知:int i=5,下列do-while循环语句的循环次数为()。 do{cout< i--; }while(i!=0); A.0 B.1 C.5 D.无限 7.下面关于循环语句的描述中,()是错误的。 A.循环体内可以包含有循环语句 B.循环体内必须同时出现break语句和continue语句 C.循环体内可以出现选择语句 D.循环体内可以是空语句 8.下面程序段()。 x=3; do {y=x--; if(!y) {cout<<”x”; continue;} cout<<”#”;} while(x>=1 && x<=2); A.将输出## B.将输出### C.是死循环 D.含有不合法的控制表达式 9.在函数的定义格式中,下面各组成部分中,()是可以省略的。 A.函数名 B.函数体 C.函数数据类型说明 D.函数参数 10.在函数的引用调用时,实参和形参应该是使用()。 A.变量值和变量 B.地址值和指针C.变量值和引用 D.地址值和引用 11.以下关于文件操作的叙述中,不正确的是()。 A.打开文件的目的是使文件对象与磁盘文件建立联系 B.文件读写过程中,程序将直接与磁盘文件进行数据交换 C.关闭文件的目的之一是保证将输出的数据写入硬盘文件 D.关闭文件的目的之一是释放内存中的文件对象 12. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。 A.p[i] B.*(*(a+i)) C.a[p-a] D.*(&a[i]) 13.以下程序的输出结果是( )。 #include void main() {char s[]="abcdefbcde",*p=s; int v1=0,v2=0,v3=0,v4=0; for (p;*p;p++) switch(*p) { case 'a':v1++;break; case 'b':v3++;break; case 'e':v2++;break; default: v4++; } cout< } A.1,2,2,5 B.4,7,5,8 C.1,5,3,10 D.8,8,8,8 14. 下列结构体定义,正确的是。 A. record { B. struct record { int no; int no; char num[16]; char num[16]; float score ; float score ; } ; } C. struct record { D. struct record { int no; int no char num[16]; char num[16] float score ; float score } ; } 15. 下列是构造函数的特点,()是错误的。 A.构造函数是一种成员函数,它具有一般成员函数的特点 B.构造函数的名称与其类名相同 C.构造函数必须指明其类型 D.一个类中可定义一个或多个构造函数 16. 关于友元函数的描述中,()是错的。 A.友元函数是成员函数,它被说明在类体内 B.友元函数可直接访问类中的私有成员 C.友元函数破坏封装性,使用时尽量少用 D.友元类中的所有成员函数都是友元函数 17. 下列对派生类的描述中,()是错误的。 A.一个派生类可以作为另一个派生类的基类 B.派生类至少应有一个基类 C.基类中成员访问权限继承到派生类中都保持不变 D.派生类的成员除了自已定义的成员外,还包含了它的基类成员 18. C++类体系中,能被派生类继承的有()。 A.构造函数B.虚函数 C.友元函数 D.析构函数 19.关于下列虚函数的描述中,()是正确的。 A.虚函数是一个static存储类的成员函数 B.虚函数是一个非成员函数 C.基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数D.派生类的虚函数与基类的虚函数应具有不同的类型或个数 20. 以下有关静态数据成员函数的叙述不正确的是()。 A.静态成员函数属于整个类 B.对静态成员函数的引用不允许使用对象名 C.在静态成员函数中不能直接引用类的非静态成员 D.使用类名可以直接调用其静态成员函数 21. 下列有关运算符重载的描述中,()是正确的。 A.运算符重载可改变其优先级B.运算符重载不改变其语法结构C.运算符重载可改变其结合性 D.运算符重载可改变其操作数的个数 22.对new运算符的下列描述中,( )是错误的。 A.它可以动态创建对象和对象数组 B.用它创建对象数组时必须指定初始值 C.用它创建对象时要调用构造函数 D.用它创建的对象可以使用运算符delete来释放 23.下列是为字符数组赋字符串的语句组,其中错误是()。 A.char s[10]; s=”program”; B.char s[]=”program”; C.char s[10]=”Hello!”; D.char s[10];strcpy(s,”hello!”); 24.当调用函数时,实参是一个一维数组名a,则向函数传送的是( )。 A.数组的长度 B.数组所有元素的值 C.数组元素a[0]的值 D.数组元素a[0]的地址 25.下列有关类的说法不正确的是( )。 A.对象是类的一个实例 B.任何一个对象只能属于一个具体的类 C.一个类只能有一个对象 D.类与对象的关系和数据类型与变量的关系相似 答案:1~5:BADBC 6~10:DBBDC 11~15:BBACC 16~20:ACBCB 21~25:BBADC 1:指出下列对定义重载函数的要求中,哪些是错误的提法。 A.要求参数的个数相同。 B.要求参数中至少有一个类型不同。 C.求函数的返回值不同。 D. 要求参数的个数相同时,参数类型不同。答案:C 2:下列运算符中,()运算符在C++中不能重载。 A.?: B.[] C.new D.&& 答案:A 3:下面关于友元的描述中,错误的是()。 A.友元函数可以访问该类的私有数据成员 B.一个类的友元类中的成员函数都是这个类的友元函数 C.友元可以提高程序的运行效率 D.类与类之间的友元关系可以继承 答案:D 4:下述静态成员的特性中,()是错误的。 A.静态成员函数不能利用this指针 B.静态数据成员要在类体外进行初始化 C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符 D.静态数据成员不是所有对象所共有的 答案:D 5:关于虚函数的描述中,()是正确的。 A.虚函数是一个静态成员函数 B.虚函数是一个非成员函数 C.虚函数既可以在函数说明时定义,也可以在函数实现时定义 D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 答案:D 6:下列关于动态联编的描述中,错误的是()。 A.动态联编是以虚函数为基础 B.动态联编是运行时确定所调用的函数代码的 C.动态联编调用函数操作是指向对象的指针或对象引用 D.动态联编是在编译时确定操作函数的 答案:D 8:下面4个选项中,()是用来声明虚函数的。 A.virtual B.public C.using D.false 答案:A 9: 编译时的多态性可以通过使用( )获得。 A.虚函数和指针 B.重载函数和析构函数 C.虚函数和对象 D.虚函数和引用 答案:A 10: 关于纯虚函数和抽象类的描述中,错误的是()。 A.纯虚函数是一种特殊的虚函数,它没有具体的实现 B.抽象类是指具体纯虚函数的类 C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类 D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 答案:B 11: 下列描述中,()是抽象类的特征。 A.可以说明虚函数 B.可以进行构造函数重载 C.可以定义友元函数 D.不能说明其对象 答案:D 12: 以下()成员函数表示虚函数。 A.virtual int vf(int); B.void vf(int)=0; C.virtual void vf()=0; D.virtual void vf(int) { }; 答案:D 13: 如果一个类至少有一个纯虚函数,那么就称该类为( A )。 A.抽象类 B.虚函数 C.派生类 D.以上都不对 答案:A 14: 要实现动态联编,必须通过()调用虚函数。 A.对象指针 B.成员名限定 C.对象名 D.派生类名 答案:A 15: 下面描述中,正确的是()。 A.virtual可以用来声明虚函数 B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类 C.即使基类的构造函数没有参数,派生类也必须建立构造函数 D.静态数据成员可以通过成员初始化列表来初始化 答案:A 16: 已知int a, *pa=&a;输出指针pa十进制的地址值的方法是()。