一、选择题
1.字符串常量"ME"的字符个数是__________.
A) 4 B) 3 C) 2 D) 1
2.下面对枚举类型的描述正确的是__________.
A)枚举类型的定义为:enum {Monday,Tuesday,Wednesday,Thursday,Friday} Day;
B)在C++语言中,用户自定义的枚举类型的第一个常量的默认值是1.
C)可以定义如下枚举类型:enum {Monday,Tuesday,Wednesday=5,Thursday,Friday=5};.
D)以上说法都不正确.
3.定义如下枚举类型:enum Number{one=1, two=2, four=4, eight=8}; ,则下列语句正确的是__________.
A)Number 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 a[5]= "Hello"; D)char a[2][5]={ "Hello
5.下列描述正确的是__________.
A)不是每个C++程序都必须包含预处理命令#include B)C++程序必须有return语句. C)C++程序中的变量必须定义在主程序内部. D)C++程序中所使用的符号常量可以不进行定义. 6.对于语句const 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)p B)c C)b D)a 8.有如下定义语句: typedef char *PCHAR; ,下列语句正确的是__________. A)语句PCHAR p定义了一个字符变量 B)PCHAR p=’a’; C)PCHAR p; char name[5]=”jone”; p=name; D)PCHAR p=”hello”; cout< 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)9 B)10 C)11 D)无限 11.当一个函数无返回值时,函数的类型应为__________. A)任意 B)void C)int D)char 12.一个函数带有参数说明时,则参数的默认值应该在__________中给出. A)函数定义 B)函数声明 C)函数定义或声明 D)函数调用 13.在C++语言中函数返回值的类型是由__________决定的. A)调用该函数时系统临时 B)return语句中的表达式类型 C)定义该函数时所指定的函数类型 D)调用该函数时的主调函数类型 14.若有以下函数调用语句: f(m+n,x+y,f(m+n,z,(x,y))); 在此函数调用语句中实参的个数是__________. A) 6 B)5 C)4 D)3 15.在C++语言中,对函数参数默认值的描述正确的是__________. A)函数参数的默认值只能设定一个 B)一个函数的参数若有多个,则参数默认值的设定可以不连续 C)函数参数必须设定默认值 D)在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值 16.不能作为函数重载判断依据的是__________. A)const B)返回类型 C)参数个数 D)参数类型 17.不能实现函数之间数据传递的是__________. A)全局变量 B)局部变量 C)函数接口 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)构造函数不能重载,析构函数不能重载 21.假定MyClass为一个类,则执行MyClass a, b(2), *p; 语句时,自动调用该类构造函数__________次. A) 2 B)3 C)4 D)5 22.下面对于友元函数描述正确的是__________. A)友元函数的实现必须在类的内部定义 B)友元函数是类的成员函数 C)友元函数破坏了类的封装性和隐藏性 D)友元函数不能访问类的私有成员 23.在C++中,数据封装要解决的问题是__________. A)数据的规范化 B)便于数据转换 C)避免数据丢失 D)防止不同模块之间数据的非法访问 24.一个类的友元函数或友元类能够通过成员操作符访问该类的__________. A)私有成员 B)保护成员 C)公有成员 D)所有成员 25.下面对静态数据成员的描述中,正确的是__________. A)静态数据成员可以在类体内进行初始化 B)静态数据成员不可以被类的对象调用 C)静态数据成员不能受private控制符的作用 D)静态数据成员可以直接用类名调用 26.下面对静态数据成员的描述中,正确的是__________. A)静态数据成员是类的所有对象共享的数据 B)类的每个对象都有自己的静态数据成员 C)类的不同对象有不同的静态数据成员值 D)静态数据成员不能通过类的对象调用 27.假定MyClass为一个类,则执行MyClass a[3],*p[2]; 语句时,自动调用该类构造函数_____次. A) 2 B) 3 C) 4 D) 5 28.对于常数据成员,下面描述正确的是_____. A)常数据成员可以不初始化,并且不能更新 B)常数据成员必须被初始化,并且不能更新 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.下列关于运算符重载的描述中,正确的是_____. A)运算符重载可以改变运算符的操作数的个数 B)运算符重载可以改变优先级 C)运算符重载可以改变优先级 D)运算符重载不可以改变语法结构 32.C++语言建立类族是通过_____实现的。 A)类的嵌套 B)虚函数 C)类的继承 D)抽象类 33.继承具有_____,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类成员. A)规律性 B)传递性 C)重复性 D)多样性 34.下列对基类和派生关系的描述中,错误的是_____. A)派生类是基类的具体化 B)派生类是基类的子集 C)派生类是基类定义的延续 D)派生类是基类的组合 35.下列对派生类的描述中,错误的是_____. A)一个派生类可以作为另一个派生类的基类 B)派生类至少有一个基类 C)派生类的缺省继承方式是private D)派生类只继承了基类的公有成员和保护成员 36.下列关于继承的描述中,错误的是_____. A)析构函数不能被继承 B)派生类是基类的组合 C)派生类的成员除了它自己的 成员外,还包含了它的基类的 成员 D)派生类中继承的基类成员的访问权限到派生类保持不便 37.派生类的 对象对它的基类成员中_____是可以访问的. A)公有继承的成员 B)公有继承的私有成员 C)公有继承的保护成员 D)私有继承的公有成员 38.派生类的构造函数的成员初始化列表中,不能包含_____. A)基类的构造函数 B)派生类中子对象的初始化 C)基类中子对象的初始化 D)派生类中一般数据成员的初始化 39.关于多继承二义性的描述中,错误的是_____. A)一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性 B)解决二义性的最常用的方法是对成员名的限定法 C)基类和派生类中同时出现的同名函数,也存在二义性问题 D)一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,可能出现二义性 40.下面_____的叙述不符合赋值兼容规则. A)派生类的对象可以赋值给基类的对象 B)基类的对象可以赋值给派生类的对象 C)派生类的对象可以初始化基类的引用 D)派生类的对象的地址可以赋值给指向基类的指针 41.下列程序中,编译时不会出错的语句是_____. #include class Base { public: Base(){} Base(int i){ data=i; } private: int data; }; class Derived:public Base { public: Derived():Base(0){} Derived(int x):Base(x){} }; void main() { Derived d1(1); Base *pb,b1; pb=&d1; //A d1=b1; //B Base &refB=d1 Derived d2=*pb //C Derived &refD=refB; //D } 42.下列关于动态联编的描述中,错误的是_____. A)动态联编是以虚函数为基础的 B)动态联编是在运行时确定所调用的函数代码的 C)动态联编调用函数操作是指向对象的指针或对象引用 D)动态联编是在编译时确定操作函数的 43.关于虚函数的描述中,正确的是_____. A)虚函数是一个静态成员函数 B)虚函数是一个非成员函数 C)虚函数既可以在函数说明时定义,也可以在函数实现时定义 D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型. 44.实现运行时的多态性要使用_____. A)重载函数 B)构造函数 C)析构函数 D)虚函数 45.要实现动态联编,必须通过_____调用虚函数. A)对象指针 B)成员名限定 C)对象名 D)派生类名 46.在派生类中重新定义虚函数时,除了_____方面,其他方面都必须与基类中相应的虚函数保持一致. A)参数个数 B)参数类型 C)函数名称 D)函数体 47.下面关于构造函数和析构函数的描述,错误的是_____. A)析构函数中调用虚函数采用静态联编 B)对虚析构函数的调用可以采用动态联编 C)当基类的析构函数是虚函数时,其派生类的构造函数也一定是虚函数 D)构造函数可以声明为虚函数 48.关于纯虚函数和抽象类的描述中,错误的是_____. A)纯虚函数是一种特殊的虚函数,它没有具体的实现 B)抽象类是指具有纯虚函数的类 C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类 D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 49.下面的描述,正确的是_____. A)virtual可以用来声明虚函数 B)含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类 C)即使基类的构造函数没有参数,派生类也必须建立构造函数 D)静态数据成员可以通过成员初始化列表来初始化 50.在下面程序中,A,B,C,D四句编译时不会出现错误的是_____. #include class Base { public: Base(){} Base(int c):count(c){} virtual void print() const=0; private: int count; }; class Derived:public Base { public: Derived():Base(0){} Derived(int c):Base(c){} void print() const { cout<<"Derived"< void main() { Derived d(10); Base *pb; pb=&d; //A Base &cb=d; Derived dd=*pb; //B Derived &cd=cb; //C Base bb=d; //D } 51.模板式实现类属机制的 一种工具,其功能非常强大,它既允许用户构造类属函数,即_____;也允许用户构造类属类,即_____. A)模板函数 B)函数模板 C)模板类 D)类模板 52.类模板的模板参数_____. A)只可作为数据成员的类型 B)只可作为成员函数的返回类型 C)只可作为成员函数的参数类型 D)以上三者皆可 53.下列对模板的声明,正确的是_____. A) template C) template 54.cout是I/O流库预定义的_____. A) 类 B) 对象 C) 包含文件 D) 常量 55.与C语言printf(“Hello world\\n”);语句功能相同的C++语句是_____. A) cout>>”Hello world\\n”; B)cin>>”Hello world\\n”; C)cout<<”Hello world\\n”; D)cin<<”Hello world\\n”; 56.已知int a,*pa=&a;,输出指针pa十进制的地址值的方法是_____. A)cout< 1.程序文件的编译错误分为__________和__________两类. 2.字符串类型的变量一般用__________和__________类型的变量表示. 3.空字符串的长度是__________. 4.一个指针类型的对象占用内存的__________个字节的存储空间. 5.假设p是一个指针,则a=*p++运算首先__________,然后__________. 6.若指针p所指向的对象的值为10,p+1所指向的对象的值为20,则*++p的值为__________. 7.除了在__________和__________的情况下,定义引用变量必须初始化. 8.下列程序计算由0到9之间的任意3个不相同的数字组成的三位数共有多少种不同的组合方式.请完成下列程序. #include void main() { int i,j,k,count=0; for(i=9;i>=1;i--) for(j=9;j>=0;j--) if(______) continue; else for(k=0;k<=9;k++) if(_______) count++; cout< 9.在C++中, __________函数不需要使用相应的函数原型语句加以声明. 10.函数的调用方式分为两种: __________调用和__________调用.其中, __________调用又根据C++中变量值的不同分为:传递变量本身的调用和__________的__________调用. 11.具有相同函数名但具有不同参数表的函数称为__________. 12.假定一个函数的参数说明为int x[][N](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++中,编程的单位是__________. 16.类的具体表现是通过定义__________来操作的. 17.一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为__________权限,而把成员函数(方法)定义为__________权限. 18.在结构定义中,数据和成员函数默认权限是__________.在类定义中,数据和成员函数默认权限是__________.. 19.类中构造函数有__________个,析构函数有__________个. 20.要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入语句__________. 21.在C++语言中,每个类都有一个隐含的指针叫_____指针.该指针指向_____. 22.重载运算符函数的函数名有关键字_____引出. 23.利用成员函数对二元运算符重载,其左操作数为_____,右操作数为_____. 24.派生类对基类的继承有三种方式: _____. _____. _____. 25.构造函数_____被继承,析构函数_____被继承. 26.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行_____,再执行_____,最后执行_____. 27.对基类数据成员的初始化必须在派生类构造函数中的_____处执行. 28.当撤销一个含有基类和子对象成员的派生类对象时,将首先完成_____的析构函数定义体的执行,接着完成_____的析构函数定义体的执行,最后完成_____的析构函数定义体的执行. 29.动态联编中直到_____时才能确定调用哪个函数;而静态联编则是在_____时进行的. 30.对虚函数使用对象指针或引用调用,系统使用_____联编;使用对象调用时,系统使用_____联编. 31.C++中_____虚构造函数,但_____虚析构函数. 32.带有_____的类称为抽象类,它只能作为_____来使用. 33.抽象类不能_____,但可以_____作为参数类型,函数返回类型或显式转换类型. 34.如果一个模板声明列出多个参数,则多个参数之间必须使用_____隔开,每个参数都必须重复使用关键字_____. 35.函数模板既可以与_____重载,也可以与_____重载. 36.函数模板的友元函数可以是_____或_____. 三、阅读程序 1.写出下列程序的运行结果. #include void main() { int a[2][2]={1,2,3,4},*p; p=a[0]+1; cout<<*p< 2.写出下列程序的运行结果. #include void main() { int x; int &p=x; x=10; p=x+10; cout< 3.写出下列程序的运行结果 #include int a=100; void fun() { int a=0; a++; ::a=200; cout<<"The a of fun is"< cout<<"::a="<<::a< void main() { int a=10; fun(); a++; ::a+=1; cout<<"The a of main is"< cout<<"::a="<<::a< 4.写出下列程序的运行结果. #include int 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)); cout<<"m="< 5.写出下列程序的运行结果. #include class MyClas { public: MyClass(int a) { X=a; cout<<"This is"< ~MyClass() { cout<<"This is "< private: int X; }; MyClass globalObj(0); void main() { MyClass commonObj(1); static MyClass staticObj(2); } 6.写出下列程序的运行结果. #include class CStatic { public: CStatic(){val++;} static int val; }; int CStatic::val=0; void main() { cout<<"CStatic::val="< cout<<"cs1.val="< cout<<"cs2.val="< cout<<"cs1.val="< 7. 写出下列程序的运行结果. #include class MyClass { public: void SetValue(int val); MyClass(); ~MyClass(); private: int i; }; MyClass::MyClass() { i=0; cout<<"This is a constructor!i="<} void MyClass::SetValue(int val) { i=val; cout<<"i="<} MyClass::~MyClass() { cout<<"This is a destructor!i="<} void main() { MyClass * myl[3]; int k; for(k=0;k<3;k++) myl[k]=new MyClass; for(k=0;k<3;k++) delete myl[k]; } 8. 写出下列程序的运行结果. #include class Data { public: Data(int x) { Data::x=x; cout<<"Data cons."< ~Data(){ cout<<"Data des."< int x; }; class Base { public: Base(int x)d1(x){cout<<"Base cons."< Data d1; }; class Derived:public Base { public: Derived(int x):Base(x),d2(x){cout<<"Derived cons."< Data d2; }; void main() { Derived obj(5); } 9. 写出下列程序的运行结果. #include class Base { public: Base(int i=0):x(i){} virtual int sum() const{ return x;} private: int x; }; class Derived:public Base { public: Derived(int i=0,int j=0):Base(i),y(j){} int sum() const { return Base::sum()+y;} private: int y; }; void Call(Base b) { cout<<"sum="< void main() { Base b(10); Derived d(10,40); Call(b); Call(d); } 10. 写出下列程序的运行结果. #include template void fun(T1 &x,T2 &y) { if(sizeof(T1)>sizeof(T2)) x=(T1)y; else y=(T2)x; } void main() { double d; int i; d=99.99; i=88; fun(d,i); cout<<"d="< i=9999; fun(i,d); cout<<"d="< 四、编写程序 1.定义一个学生结构student,包括学生的学号、姓名、性别和出生日期。要求出生日期包括年、月、日。 2输入一个自然数,将该自然数的每一位数字按反序输出.例如:输入12345,输出54321. 3.编写程序,计算s=1+(1+2)+(1+2+3)+…..+(1+2+3+…+n)的值. 4.编写一个递归函数完成以下公式的运算: sum(n)=1-1/2+1/3-1/4+…(其中n>0) 5.用函数指针实现对下面3个函数的调用. (1)求两个数的最大值: int Max(int x, int y); (2)求两个数的最小值: int Min(int x, int y); (3)求两个数的和: int Add(int x, int y); 6.设计一个类CRectangle,要求如下所述. (1)该类中的私有成员变量存放Rectangle的长和宽,并且设置它们的默认值是1. (2)通过成员函数设置其长和宽,并确保长和宽都在(0,50)范围之内. (3)求周长Perimeter. 7.设计一个类CDateInfo,要求其满足下述要求. (1)要求有一个无参的构造函数,其初始的年.月.日分别为:2000,1,1. (2)要求有一个带参数的构造函数,其参数分别对应年.月.日. (3)要求用一个成员函数实现日期的设置. (4)要求用一个成员函数实现日期的获取. 8.定义Point类,有数据成员X和Y,重载++和—运算符,要求同时重载前缀方式和后缀方式. 9.编写一个程序,其中有一个简单的串类String,包含设置字符串,返回字符串长度及内容等功能.另有一个具有编辑功能的串类EditString,它的基类时String,在其中设置一个光标,使其能支持在光标处的插入,替换和删除等编辑功能. 10.使用模板函数实现swap(x,y),函数功能为交换x和y的值. 11.分别用递归和非递归方式实现(在有效的范围内,考虑最简单的情况即可) (1)将一个整型数转换为数字字符串 (2)将一个数字字符串转换为整型数 (3)将一个字符串反转下载本文