一、选择题
1. 下列关于对象初始化的叙述中,正确的是( )
A.定义对象的时候不能对对象进行初始化
B.定义对象之后可以显式地调用构造函数进行初始化
C.定义对象时将自动调用构造函数进行初始化
D.在一个类中必须显式地定义构造函数实现初始化
2.下列关于基类和派生类关系的叙述中,正确的是( )
A.每个类最多只能有一个直接基类
B.派生类中的成员可以访问基类中的任何成员
C.基类的构造函数必须在派生类的构造函数体中调用
D.派生类除了继承基类的成员,还可以定义新的成员
3.下列关于赋值运算符 “=” 重载的叙述中,正确的是( )
A.赋值运算符只能作为类的成员函数重载
B.默认的赋值运算符实现了“深层复制”功能
C.重载的赋值运算符函数有两个本类对象作为形参
D.如果己经定义了复制(拷贝)构造函数,就不能重载赋值运算符
4.下列选项中,正确的C++标识符是( )
A.6_group B.group~6 C.age+3 D. _group_6
5.下列循环语句中有语法错误的是( )
A. int i; for(i=1; i<10; i++)cout<<‘*‘;
B. int i,j; for(i=1, j=0; i<10; i++, j++)cout<<‘*‘;
C. int i=0; for(; i<10; i++)cout<<‘*‘;
D. for(1)cout<<‘*‘;
6.下列定义语句中,错误的是( )
A. int px*; B.char *acp[10];
C.char(*pac)[10]; D.int(*p)();
7.若MyClass为一个类,执行“MyClass a[4], *p[5];”语句时会自动调用该类构造函数的次数是( )
A. 2 B. 5 C.4D.9
8.有如下程序:
#include<iostream>#include<cmath>using std::cout;class Point{public:friend double distance(const Point &p); //p距原点的距离Point(int xx=0,int yy=0):x (xx),Y(YY){}//①private:int x, Y;};double distance(const Point &p) { //②return sqrt(p.x*p.x+p.Y*p.Y);}int main(){Point p1(3,4);cout<<distance(p1); //③return 0;}
下列叙述中正确的是( )A.程序编译正确 B.程序编译时语句①出错 C.程序编译时语句②出错D.程序编译时语句③出错
9.下列哪两个是等同的( )int b;
A. const int *a =&b; B. const* int a = &b;
C.const int *const a = &b;D. int const* const a = &b;
10.有如下语句序列:char str[10]; cin>>st; 当从键盘输入“I love this game”时,str中的字符串是( )
A."I love this game" B. "I love thi"
C."I love" D. "I"
11.有函数模板声明和一些变量定义如下:
template<class Tl, class T2, class T3>T1 sum(T2, T3);
double dl, d2;
则下列调用中,错误的是( )
A.sum<double, double, double>(dl, d2);
B.sum<double, double>(d1, d2);
C.sum<double>(d1, d2);
D.sum(d1, d2);
12.以下程序段完全正确的是( )
A. int*p; scanf("%d",&p); B. int *p; scanf(“%d”, p);
C. int k, *p=&k; scanf("%d",p); D. int k,*p:; *p= &k; scanf(“%d”, p);
13.有定义语句:int *p[4]; 以下选项中与此语句等价的是( )
A.int p[4]; B.int **p; C.int *(p[4]); D.int(*p)[4];
14.若要重载+、=、<<、=和[ ]运算符,则必须作为类成员重载的运算符是( )
A. +和= B.=和<< C.==和<< D.=和[ ]
15.下列说法正确的是( )A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字inline定义
16.下面对于友元函数描述正确的是( )A.友元函数的实现必须在类的内部定义 B.友元函数是类的成员函数 C.友元函数破坏了类的封装性和隐藏性 D.友元函数不能访问类的私有成员17.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( ) A.派生类的对象可以赋给基类的对象 B.派生类的对象可以初始化基类的引用 C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针18.下列关于多态性的描述,错误的是( ) A.C++语言的多态性分为编译时的多态性和运行时的多态性 B.编译时的多态性可通过函数重载实现 C.运行时的多态性可通过模板和虚函数实现 D.实现运行时多态性的机制称为动态绑定
19.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是( )A.一元运算符 B.二元运算符 C.选项A和选项B都可能 D.重载错误 20.在下列关于C++函数的叙述中,正确的是( )A.每个函数至少要有一个参数 B.每个函数都必须返回一个值 C.函数在被调用之前必须先声明 D.函数不能自己调用自己
21.如果进栈序列为e1、e2、e3、e4,则可能的出栈序列是( )
A.e3、e1、e4、e2 B.e2、e4、e3、e1 C.e3、e4、e1、e2 D.任意顺序
22.下面关于模板的描述,错误的是( )A.函数模板和类模板的参数可以是任意的数据类型 B.类模板不能直接使用,必须先实例化为相应的模板类,然后定义了模板类的对象 C.函数模板不能直接使用,需要实例化为模板函数后才能使用 D.类模板的成员函数都是模板函数
23.下面对静态数据成员的描述中,正确的是( )A.静态数据成员可以在类体内进行初始化 B.静态数据成员不可以被类的对象调用 C.静态数据成员不受private控制符的作用 D.静态数据成员可以直接用类名调用
24.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )
A.公有类型 B.私有类型 C.保护类型 D.友元类型
25.抽象基类是指( )
A.嵌套类 B.派生类 C.含有纯虚函数 D.多继承类
26.如果已定义了一个C++类CMyList并有以下语句:CMyList list(3); 以下说法正确的是( )A.该语句会创建一个CMyList类的一个对象 B.该语句会创建一个CMyList类的3个对象 C.必须为类CMyList定义一个构造函数 D.必须为类CMyList定义一个析构函数 E.必须定义函数CMyList list(int)
27.以下说法正确的是( )A.静内联(inline)函数改善了函数调用的执行效率 B.静类A的友元(friend)函数可以访问类A的私有成员 C.静类A的友元(friend)类B可以访问类A的私有成员 D.静类A的静态数据成员为类A的所有对象所共享 E.静类A的静态成员函数没有传递this指针作为参数
28.类B从类A派生,则类B可以访问类A中的( )成员。 A.public成员 B.private成员 C.protected成员 D.数据成员 E.函数成员 29.面向对象的程序设计语言具有( )等共同特性。 A.封装性 B.多态性 C. 简单性 D. 复杂性 E. 继承性 30.现有一个程序如下:
class A{public:void f(){cout<<"A::f().."<<endl;}
};class B{
public:
void f(){
cout<<"B::f().."<<endl;}void g(){cout<<"B::g().."<<endl;}};class C:public A,public B{public :void g(){cout<<"C::g().."<<endl;}void h(){cout<<"C::h().."<<endl;f();// 语句1}};int main(){C obj;obj.f();//语句2obj.A::f();//语句3obj.B::f();//语句4obj.g(); //语句5system("pause");return 0;}
则编译时会产生错误的语句有( )
A. 语句1 B. 语句2 C. 语句3 D. 语句4 E. 语句5