




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+练习一、选择题1.字符串常量ME的字符个数是_.A) 4 B) 3 C) 2 D) 12.下面对枚举类型的描述正确的是_.A)枚举类型的定义为:enum Monday,Tuesday,Wednesday,Thursday,Friday Day;B)在C+语言中,用户自定义的枚举类型的第一个常量的默认值是1.C)可以定义如下枚举类型:enum Monday,Tuesday,Wednesday=5,Thursday,Friday=5;.D)以上说法都不正确.3.定义如下枚举类型:enum Numberone=1, two=2, four=4, eight=8; ,则下列语句正确的是_.A)Nu
2、mber num=1;B)Number num=Number(20);C)Number num=Number(eight|0xFF);D)枚举类型Number的取值范围是0到15.4.下列对字符数组进行初始化的语句正确的是_.A)char a=Hello;B)char a=H,e,l,l,o;C)char a5= Hello;D)char a25= Hello,World;5.下列描述正确的是_.A)不是每个C+程序都必须包含预处理命令#include.B)C+程序必须有return语句.C)C+程序中的变量必须定义在主程序内部.D)C+程序中所使用的符号常量可以不进行定义.6.对于语句con
3、st int x=10;的描述正确的是_.A)该语句不允许定义为int const x=10;B)在程序中可以重新对x赋值.C)变量x不能使用+运算符.D)const关键字只能用来修饰常量.7.执行完C+程序中的下列三条语句之后c指向_. int a,b,*c=&a;int *p=c;p=&b;A)pB)cC)bD)a8.有如下定义语句:typedef char *PCHAR; ,下列语句正确的是_.A)语句PCHAR p定义了一个字符变量B)PCHAR p=a;C)PCHAR p; char name5=”jone”; p=name;D)PCHAR p=”hello”; coutp;的输出结
4、果是h.9.下列对变量的引用中错误的是_.A)int a; int &p=a;B)char a; char &p=a;C)int a; int &p; p=a;D)float a; float &p=a;10.下列程序段循环_次.int x=-10;while(+x)A)9B)10C)11D)无限11.当一个函数无返回值时,函数的类型应为_.A)任意B)voidC)intD)char12.一个函数带有参数说明时,则参数的默认值应该在_中给出.A)函数定义B)函数声明C)函数定义或声明D)函数调用13.在C+语言中函数返回值的类型是由_决定的.A)调用该函数时系统临时B)return语句中的表达
5、式类型C)定义该函数时所指定的函数类型D)调用该函数时的主调函数类型14.若有以下函数调用语句:f(m+n,x+y,f(m+n,z,(x,y);在此函数调用语句中实参的个数是_.A)6B)5C)4D)315.在C+语言中,对函数参数默认值的描述正确的是_.A)函数参数的默认值只能设定一个B)一个函数的参数若有多个,则参数默认值的设定可以不连续C)函数参数必须设定默认值D)在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值16.不能作为函数重载判断依据的是_.A)constB)返回类型C)参数个数D)参数类型17.不能实现函数之间数据传递的是_.A)全局变量B)局部变量C)函数接口
6、D)函数返回值18.一个函数为void f(int, char=a),另一个函数为 void f(int),则它们_.A)不能在同一个程序中定义B)可以在同一程序中定义并可重载C)一个定义在main函数中,一个定义在子函数中D)以上说法均不正确19.函数定义为Fun(int &i),变量定义 n=100,则下面调用正确的是_.A) Fun(20)B) Fun(20+n)C) Fun(n)D) Fun(&n)20.对类的构造函数和析构函数描述正确的是_.A)构造函数可以重载,析构函数不能重载B)构造函数不能重载,析构函数可以重载C)构造函数可以重载,析构函数可以重载D)构造函数不能重载,析构函数
7、不能重载21.假定MyClass为一个类,则执行MyClass a, b(2), *p; 语句时,自动调用该类构造函数_次.A)2B)3C)4D)522.下面对于友元函数描述正确的是_.A)友元函数的实现必须在类的内部定义B)友元函数是类的成员函数C)友元函数破坏了类的封装性和隐藏性D)友元函数不能访问类的私有成员23.在C+中,数据封装要解决的问题是_.A)数据的规范化B)便于数据转换C)避免数据丢失D)防止不同模块之间数据的非法访问24.一个类的友元函数或友元类能够通过成员操作符访问该类的_.A)私有成员B)保护成员C)公有成员D)所有成员25.下面对静态数据成员的描述中,正确的是_.A)
8、静态数据成员可以在类体内进行初始化B)静态数据成员不可以被类的对象调用C)静态数据成员不能受private控制符的作用D)静态数据成员可以直接用类名调用26.下面对静态数据成员的描述中,正确的是_.A)静态数据成员是类的所有对象共享的数据B)类的每个对象都有自己的静态数据成员C)类的不同对象有不同的静态数据成员值D)静态数据成员不能通过类的对象调用27.假定MyClass为一个类,则执行MyClass a3,*p2; 语句时,自动调用该类构造函数_次.A) 2B) 3C) 4 D) 528.对于常数据成员,下面描述正确的是_.A)常数据成员可以不初始化,并且不能更新B)常数据成员必须被初始化,
9、并且不能更新C)常数据成员可以不初始化,并且可以被更新D)常数据成员必须被初始化,并且可以被更新29.对下列语句正确的描述是_.const int *x; /int * const x; /A)语句的含义是指针变量x不能更改B)语句的含义是指针变量x所指向的值不能更改C)语句的含义是指针变量x不能更改D)语句和相同含义的不同定义方式30.关于new运算符的错误的描述是_A)使用运算符new创建对象数组时必须定义初始值B)使用运算符new创建对象时,会调用类的构造函数C)运算符new可以用来动态创建对象和对象数组D)使用new运算符创建的对象可以使用运算符delete删除31.下列关于运算符重载
10、的描述中,正确的是_.A)运算符重载可以改变运算符的操作数的个数B)运算符重载可以改变优先级C)运算符重载可以改变优先级D)运算符重载不可以改变语法结构32.C+语言建立类族是通过_实现的。A)类的嵌套B)虚函数C)类的继承D)抽象类33.继承具有_,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类成员.A)规律性B)传递性C)重复性 D)多样性34.下列对基类和派生关系的描述中,错误的是_.A)派生类是基类的具体化B)派生类是基类的子集C)派生类是基类定义的延续D)派生类是基类的组合35.下列对派生类的描述中,错误的是_.A)一个派生类可以作为另一个派生类的基类B)派生类
11、至少有一个基类C)派生类的缺省继承方式是privateD)派生类只继承了基类的公有成员和保护成员36.下列关于继承的描述中,错误的是_.A)析构函数不能被继承B)派生类是基类的组合C)派生类的成员除了它自己的 成员外,还包含了它的基类的 成员D)派生类中继承的基类成员的访问权限到派生类保持不便37.派生类的 对象对它的基类成员中_是可以访问的.A)公有继承的成员B)公有继承的私有成员C)公有继承的保护成员D)私有继承的公有成员38.派生类的构造函数的成员初始化列表中,不能包含_.A)基类的构造函数B)派生类中子对象的初始化C)基类中子对象的初始化D)派生类中一般数据成员的初始化39.关于多继承
12、二义性的描述中,错误的是_.A)一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性B)解决二义性的最常用的方法是对成员名的限定法C)基类和派生类中同时出现的同名函数,也存在二义性问题D)一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,可能出现二义性40.下面_的叙述不符合赋值兼容规则.A)派生类的对象可以赋值给基类的对象B)基类的对象可以赋值给派生类的对象C)派生类的对象可以初始化基类的引用D)派生类的对象的地址可以赋值给指向基类的指针41.下列程序中,编译时不会出错的语句是_.#includeclass Basepubl
13、ic:Base()Base(int i) data=i; private:int data;class Derived:public Basepublic:Derived():Base(0)Derived(int x):Base(x);void main()Derived d1(1);Base *pb,b1;pb=&d1; /Ad1=b1; /BBase &refB=d1 Derived d2=*pb /CDerived &refD=refB; /D42.下列关于动态联编的描述中,错误的是_.A)动态联编是以虚函数为基础的 B)动态联编是在运行时确定所调用的函数代码的C)动态联编调用函数操作是
14、指向对象的指针或对象引用D)动态联编是在编译时确定操作函数的43.关于虚函数的描述中,正确的是_.A)虚函数是一个静态成员函数B)虚函数是一个非成员函数C)虚函数既可以在函数说明时定义,也可以在函数实现时定义D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型.44.实现运行时的多态性要使用_.A)重载函数B)构造函数C)析构函数D)虚函数45.要实现动态联编,必须通过_调用虚函数.A)对象指针B)成员名限定C)对象名D)派生类名46.在派生类中重新定义虚函数时,除了_方面,其他方面都必须与基类中相应的虚函数保持一致.A)参数个数B)参数类型C)函数名称D)函数体47.下面关于构造函
15、数和析构函数的描述,错误的是_.A)析构函数中调用虚函数采用静态联编B)对虚析构函数的调用可以采用动态联编C)当基类的析构函数是虚函数时,其派生类的构造函数也一定是虚函数D)构造函数可以声明为虚函数48.关于纯虚函数和抽象类的描述中,错误的是_.A)纯虚函数是一种特殊的虚函数,它没有具体的实现B)抽象类是指具有纯虚函数的类C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出49.下面的描述,正确的是_.A)virtual可以用来声明虚函数B)含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C)即使基类的构造函数没有参数,派
16、生类也必须建立构造函数D)静态数据成员可以通过成员初始化列表来初始化50.在下面程序中,A,B,C,D四句编译时不会出现错误的是_.#includeclass Basepublic:Base()Base(int c):count(c)virtual void print() const=0;private:int count;class Derived:public Basepublic:Derived():Base(0)Derived(int c):Base(c)void print() const coutDerivedendl;void main()Derived d(10);Base
17、*pb;pb=&d; /ABase &cb=d;Derived dd=*pb; /BDerived &cd=cb; /CBase bb=d; /D51.模板式实现类属机制的 一种工具,其功能非常强大,它既允许用户构造类属函数,即_;也允许用户构造类属类,即_.A)模板函数B)函数模板C)模板类D)类模板52.类模板的模板参数_.A)只可作为数据成员的类型B)只可作为成员函数的返回类型C)只可作为成员函数的参数类型D)以上三者皆可53.下列对模板的声明,正确的是_.A) template B) template C) template D) template 54.cout是I/O流库预定义的_
18、.A)类B)对象C)包含文件D)常量55.与C语言printf(“Hello worldn”);语句功能相同的C+语句是_.A) cout”Hello worldn”;B)cin”Hello worldn”;C)cout”Hello worldn”;D)cin”Hello worldn”;56.已知int a,*pa=&a;,输出指针pa十进制的地址值的方法是_.A)coutpa;B)cout*pa;C)cout&pa;D)coutlong(&pa);二、填空题1.程序文件的编译错误分为_和_两类.2.字符串类型的变量一般用_和_类型的变量表示.3.空字符串的长度是_.4.一个指针类型的对象占
19、用内存的_个字节的存储空间.5.假设p是一个指针,则a=*p+运算首先_,然后_.6.若指针p所指向的对象的值为10,p+1所指向的对象的值为20,则*+p的值为_.7.除了在_和_的情况下,定义引用变量必须初始化.8.下列程序计算由0到9之间的任意3个不相同的数字组成的三位数共有多少种不同的组合方式.请完成下列程序.#includevoid main()int i,j,k,count=0;for(i=9;i=1;i-)for(j=9;j=0;j-)if(_) continue;elsefor(k=0;k=9;k+)if(_) count+;coutcountendl;9.在C+中, _函数不
20、需要使用相应的函数原型语句加以声明.10.函数的调用方式分为两种: _调用和_调用.其中, _调用又根据C+中变量值的不同分为:传递变量本身的调用和_的_调用.11.具有相同函数名但具有不同参数表的函数称为_.12.假定一个函数的参数说明为int xN(N是常数),则等价的指针参数说明为_.13.执行完下列三条语句后,指针变量c指向_.int a,b,*c=&a;int *&p=c;p=&b;14.下面的函数Fun未使用中间变量实现了对两个数的交换,请完成下列函数的定义.void Fun(int &x,int &y) x+=y; y= _;_;15.在C语言中,编程单位是_,在C+中,编程的单
21、位是_.16.类的具体表现是通过定义_来操作的.17.一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为_权限,而把成员函数(方法)定义为_权限.18.在结构定义中,数据和成员函数默认权限是_.在类定义中,数据和成员函数默认权限是_.19.类中构造函数有_个,析构函数有_个.20.要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入语句_.21.在C+语言中,每个类都有一个隐含的指针叫_指针.该指针指向_.22.重载运算符函数的函数名有关键字_引出.23.利用成员函数对二元运算符重载,其左操作数为_,右操作数为_.24.派生类对基类的继承有
22、三种方式: _. _. _.25.构造函数_被继承,析构函数_被继承.26.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行_,再执行_,最后执行_.27.对基类数据成员的初始化必须在派生类构造函数中的_处执行.28.当撤销一个含有基类和子对象成员的派生类对象时,将首先完成_的析构函数定义体的执行,接着完成_的析构函数定义体的执行,最后完成_的析构函数定义体的执行.29.动态联编中直到_时才能确定调用哪个函数;而静态联编则是在_时进行的.30.对虚函数使用对象指针或引用调用,系统使用_联编;使用对象调用时,系统使用_联编.31.C+中_虚构造函数,但_虚析构函数.32.带有_的类
23、称为抽象类,它只能作为_来使用.33.抽象类不能_,但可以_作为参数类型,函数返回类型或显式转换类型.34.如果一个模板声明列出多个参数,则多个参数之间必须使用_隔开,每个参数都必须重复使用关键字_.35.函数模板既可以与_重载,也可以与_重载.36.函数模板的友元函数可以是_或_.三、阅读程序1.写出下列程序的运行结果.#includevoid main()int a22=1,2,3,4,*p;p=a0+1;cout*pendl;2.写出下列程序的运行结果.#includevoid main()int x;int &p=x;x=10;p=x+10;coutx,pendl;3.写出下列程序的运
24、行结果#includeint a=100;void fun()int a=0;a+;:a=200;coutThe a of fun isaendl;cout:a=:aendl;void main()int a=10;fun();a+;:a+=1;coutThe a of main isaendl;cout:a=:aendl;4.写出下列程序的运行结果.#includeint f(int a)return +a;int g(int &a)return +a;void main()int m=0,n=0;m+=f(g(m);n+=f(f(n);coutm=mendl;coutn=nendl;5.写
25、出下列程序的运行结果.#includeclass MyClaspublic:MyClass(int a)X=a;coutThis isXs constructor.endl;MyClass()coutThis is Xs destructor.endl;private:int X;MyClass globalObj(0);void main()MyClass commonObj(1);static MyClass staticObj(2);6.写出下列程序的运行结果.#includeclass CStaticpublic:CStatic()val+;static int val;int CSt
26、atic:val=0;void main()coutCStatic:val=CStatic:valendl;CStatic cs1;coutcs1.val=cs1.valendl;CStatic cs2;coutcs2.val=cs2.valendl;CStatic cs3,cs4;coutcs1.val=cs1.valendl;coutcs2.val=cs2.valendl;7. 写出下列程序的运行结果.#includeclass MyClasspublic:void SetValue(int val);MyClass();MyClass();private:int i;MyClass:My
27、Class()i=0;coutThis is a constructor!i=iendl;void MyClass:SetValue(int val)i=val;couti=iendl;MyClass:MyClass()coutThis is a destructor!i=iendl;void main()MyClass * myl3;int k;for(k=0;k3;k+)mylk=new MyClass;for(k=0;k3;k+)delete mylk;8. 写出下列程序的运行结果.#includeclass Datapublic:Data(int x)Data:x=x;coutData
28、 cons.endl;Data() coutData des.endl; private:int x;class Basepublic:Base(int x)d1(x)coutBase cons.endl;Base()coutBase des.endl;private:Data d1;class Derived:public Basepublic:Derived(int x):Base(x),d2(x)coutDerived cons.endl;Derived()coutDerived des.endl;private:Data d2;void main()Derived obj(5);9. 写出下列程序的运行结果.#includeclass Basepublic:Base(int i=0):x(i)virtual int sum() const return x;private:int x;class Derived:public Basepublic:Derived(int i=0,int j=0):Base(i),y(j)int sum() const return Base:sum()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论