一:单选题(本题共20小题,每题3分,共60分)
1、下列哪个类型函数不适合声明为内联函数( )
A.函数体语句较多 B.函数体语句较少
C.函数执行时间较短 D.函数执行时间过长
2、int Func(int,int);不可与下列哪个函数构成重载( )
A.int Func(int,int,int); B.double Func(int,int);
C.double Func(double,double); D.double Func(int,double);
3、设类 A将其它类对象作为成员, 则建立 A 类对象时, 下列描述正确的是( )
A.A 类构造函数先执行 B.成员构造函数先执行
C.两者并行执行 D.不能确定
4、下列描述错误的是( )
A.在创建对象前,静态成员不存在 、
B.静态成员是类的成员
C.静态成员不能是虚函数
D.静态成员函数不能直接访问非静态成员
5、C++ 中,关于构造函数和析构函数,正确的描述是( )。
A) 在定义类时,必须自定义构造函数和析构函数,在创建对象时自动调用构造函数,在释放对象时自动调用析构函数
B) 构造函数和析构函数均可以重载
C) 已知类 Student 以及 Student *p; 在使用 p=new Student; 时自动调用无参构造函数创建动态对象,在 delelte p; 时自动调用析构函数释放动态对象
D) 析构函数都不可以成为虚函数
6、 关于拷贝构造函数的描述正确的是( )。
A) 通常的拷贝构造函数的参数是对象的指针类型
B) 如果不自定义拷贝构造函数,系统提供默认的拷贝构造函数
C) 如果有自定义的构造函数,系统就不再提供拷贝构造函数
D) 如果需要用已有对象为新创建的对象初始化时,就必须自定义拷贝构造函数
7、有关静态成员的描述错误的是( )。
A) 某个类的静态数据成员由该类的所有对象所共享
B) 类的公有静态数据成员既可以用类的对象访问, 也可以直接用作用域运算符“::”通过类名来访问
C) 静态数据成员既可以是私有成员,也可以是公有成员
D) 类中一旦定义了静态数据成员,就必须定义静态成员函数,以便对静态数据成员进行操作
8、 一个类的友元函数或友元类能够通过成员访问运算符访问该类的( )。
A) 所有成员 B) 私有成员 C) 保护成员 D) 公有成员
9、在派生类中重新定义虚函数时,除了( ),其他方面都必须与基类中相应的虚函数保持一致。
A) 参数个数 B) 参数类型 C) 函数名称 D) 函数体
10、对于int *pa[5];的描述中,正确的是:( )
A)pa是一个指向数组的指针,所指向的数组是5个int型元素
B)pa是一个指向某数组中第5个元素的指针,该元素是int型变量
C)pa[5]表示数组的第5个元素的值,是int型的值
D)pa是一个具有5个元素的指针数组,每个元素是一个int型指针
11、下面关于虚函数和函数重载的叙述不正确的是( )
A. 虚函数不是类的成员函数
B. 虚函数实现了C++的多态性
C. 函数重载允许非成员函数,而虚函数则不行
D. 函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定
12、设已经有A,B,C,D 4个类的定义,程序中A,B,C,D析构函数调用顺序为( )
C c;
void main()
{
A*pa=new A();
B b;
static D d;
delete pa;
}
A. A B C D
B. A B D C
C. A C D B
D. A C B D
13、写出下面程序的输出结果( )
class A
{
public:
void FuncA()
{
printf( “FuncA called\n” );
}
virtual void FuncB()
{
printf( “FuncB called\n” );
}
};
class B : public A
{
public:
void FuncA()
{
A::FuncA();
printf( “FuncAB called\n” );
}
virtual void FuncB()
{
printf( “FuncBB called\n” );
}
};
void main( void )
{
B b;
A *pa;
pa = &b;
A *pa2 = new A;
pa->FuncA();
pa->FuncB();
pa2->FuncA();
pa2->FuncB();
delete pa2;
}
A.
FuncA called
FuncB called
FuncA called
FuncB called
B.
FuncA called
FuncBB called
FuncA called
FuncB called
C.
FuncA called
FuncBB called
FuncAB called
FuncBB called
D.
FuncAB called
FuncBB called
FuncA called
FuncB called
14、以下运行时的输出结果是( )
#include
using namespace std;
class MyClass
{
public:
MyClass(int i = 0)
{
cout << i;
}
MyClass(const MyClass &x)
{
cout << 2;
}
MyClass &operator=(const MyClass &x)
{
cout << 3;
return *this;
}
~MyClass()
{
cout << 4;
}
};
int main()
{
MyClass obj1(1), obj2(2);
MyClass obj3 = obj1;
return 0;
}
A.11214444
B.11314444
C.122444
D.123444
15、如果有如下函数模板的定义,则对函数func调用不正确的是( )
template
T func(T x,T y)
{
return x+y;
}
A. func(3,5);
B. func<>(3,5);
C. func(3,2.5);
D. func(3,2.5)
16、假设A为抽象类,下列声明( )是正确的
A. A fun(int);
B. A * p;
C. int fun(A);
D. A a;
17、如果类A被声明成类B的友元,则( )
A. 类A的成员即是类B的成员
B. 类B的成员即是类A的成员
C. 类A的成员函数可以访问类B的所有成员
D. 类B的成员函数可以访问类A的所有成员
18、下面关于友元描述中,错误的是( )
A. 友元函数可以直接访问该类的私有成员
B. 一个类的友元类中的所有成员函数都是这个类的友元函数
C. 利用友元类可以提高程序的效率,但却破坏了封装性
D. 友元类不能被继承,是双向可交换的
19、this指针存在的目的是( )
A. 保证基类的公有成员可以再子类中被访问
B. 保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码
C. 保证基类protected成员在子类中可以被访问
D. 保证基类私有成员在子类中可以被访问
20、假定CSomething是一个类,执行下面这些语句之后,内存里创建了( )个CSomething对象。
CSomething a();
void main()
{
CSomething b(2);
CSomething c[3];
CSomething &ra = b;
CSomething d=b;
CSomething *pA = c;
CSomething *p = new CSomething(4);
}
A.10
B.7
C.6
D.5
二:多选题(本题共5小题,每题2分,共10分)
1、已知系统中已定义函数func,其原形是,则下列函数中可以加以重载的是( )。
int func(char c,int k=0,double d=100.0);
A.int func ();
B.int func (char c);
C.int func (char,int);
D.int func (char,int,int);
2、若有如下的定义则下列表达式中,( )是正确的(无语法错误)。
class sam
{
public:
int num;
void print(){cout< < num;}
}x,*p=&x;
A. (*p).print( );
B. p->num=10;
C. p.num;
D. x.num=5;
4、下列描述中错误的是( )
A. 所有的运算符号都可以重载
B. 基类类型的指针可以指向子类,子类类型的指针也可以指向基类
C. 可以在类的构造函数中对静态数据成员进行初始化
D. 动态联编要满足两个条件,被调用的成员函数是虚函数,用指针或引用调用虚函数
5、类的私有成员可在何处访问( )
A. 友元类的私有成员函数中
B. 本类的成员函数
C. 友元函数
D. 子类的私有函数
答案:
单选题:
A(D) BBAC
BDADD
ABBCC
BCDBC
多选题:
AD
ABD
ABC
ABC