<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一、选择题
1¡¢C++
对
C
语言作了很多改进,下列描述中( )使得
C
语言发生了质变,从面向过程变成了面向对象。
A
、增加了一些新的运算符;
B
、允许函数重载,并允许设置缺省参数;
C
、规定函数说明必须用原型;
D
、引进了类和对象的概念;
2¡¢
下列描述中,(
)是错误的。
A
、内联函数主要解决程序的运行效率问题;
B
、内联函数的定义必须出现在内联函数第一次被调用之前;
C
、内联函数中可以包括各种语句;
D
、对内联函数不可以进行异常接口声明;
3¡¢
在
C++
中,关于下列设置缺省参数值的描述中,(
)是正确的。
A
、不允许设置缺省参数值;
B
、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
C
、只能在函数的定义性声明中指定参数的缺省值;
D
、设置缺省参数值时,必须全部都设置;
4¡¢
(
)不是构造函数的特征。
A
、构造函数的函数名与类名相同;
B
、构造函数可以重载;
C
、构造函数可以设置缺省参数;
D
、构造函数必须指定类型说明。
5
、(
)是析构函数的特征。
A
、析构函数可以有一个或多
个
参数;
B
、析构函数名与类名不同;
C
、析构函数的定义只能在类体内;
D
、一个类中只能定义一个析构函数;
6
、关于成员函数特征的下列描述中,(
)是错误的。
A
、成员函数一定是内联函数;
B
、成员函数可以重载;
C
、成员函数可以设置缺省参数值;
D
、成员函数可以是静态的;
7
、下列静态数据成员的特性中,(
)是错误的。
A
、说明静态数据成员时前边要加修饰符
static
;
B
、静态数据成员要在类体外进行初始化;
C
、静态数据成员不是所有对象所共用的;
D
、引用静态数据成员时,要在其名称前加
<
类名
>
和作用域运算符;
8
、友元的作用是(
)。
A
、提高程序的运用效率;
B
、加强类的封装性;
C
、实现数据的隐藏性;
D
、增加成员函数的种类;
9
、关于
new
运算符的下列描述中,(
)是错误的。
A
、它可以用来动态创建对象和对象数组;
B
、使用它创建的对象或对象数组可以使用运算符
delete
删除;
C
、使用它创建对象时要调用构造函数;
D
、使用它创建对象数组时必须指定初始值;
10
、关于
delete
运算符的下列描述中,(
)是错误的。
A
、它必须用于
new
返回的指针;
B
、使用它删除对象时要调用析构函数;
C
、对一个指针可以使用多次该运算符;
D
、指针名前只有一对方括号符号,不管所删除数组的维数。
11
、
const int *p
说明不能修改(
)。
A
、
p
指针;
B
、
p
指针指向的变量;
C
、
p
指针指向的数据类型;
D
、上述
A
、
B
、
C
三者;
12
、已知:
print()
函数是一个类的常成员函数,它无返回值,下列表示中,(
)是正确的;
A
、
void print() const
;
B
、
const void print()
;
C
、
void const print()
;
D
、
void print(const)
;
13
、派生类的对象对它的基类成员中(
)是可以访问的。
A
、公有继承的公有成员;
B
、公有继承的私有成员;
C
、公有继承的保护成员;
D
、私有继承的公有成员;
14
、设置虚基类的目的是(
)。
A
、简化程序;
B
、消除二义性;
C
、提高运行效率;
D
、减少目标代码;
15
、下列描述中,正确的是(
)
A
、虚函数是一个
static
类型的成员函数;
B
、虚函数是一个非成员函数;
C
、抽象类是指具有纯虚函数的类;
D
、抽象类可以说明其对象;
二、判断下列描述的正确性,正确填
T
,错误填
F
。
1¡¢C++
中标识符内的大小写字母是没有区别的。(
)
2¡¢C++
是一种以编译方式实现的高级语言。(
)
3¡¢
计算函数参数顺序引起的二义性是由不同的编译系统决定的。(
)
4¡¢
返回值类型、参数个数和类型都相同的函数也可以重载。(
)
5¡¢
使用关键字
class
定义的类中缺省的访问权限是私有(
private
)的。(
)
6¡¢
类的私有成员只能被类中的成员函数访问,任何类以外的函数对它们的访问都是非法的。(
)
7¡¢
多继承情况下,派生类的构造函数的执行顺序取决于成员初始化列表中的顺序。(
)
8¡¢
在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。(
)
9¡¢
在私有继承中,基类中所有成员对派生类都是不可见的。(
)
10¡¢
在保护继承中,对于垂直访问等同于公有继承,对于水平访问等同于私有继承。(
)
11¡¢
构造函数可以声明为虚函数。(
)
12¡¢
在析构函数中调用虚函数时,采用动态束定。(
)
13¡¢
在一个成员函数内调用一个虚函数时,对该虚函数的调用进行动态束定。(
)
14¡¢
公有继承可以实现子类型。(
)
15¡¢
构造函数可以声明为纯虚函数。(
)
三、分析下列程序的输出结果。
1
、
#include <iostream.h>
class Test;
void fun1(Test t);
Test fun2();
class Test
{
public:
Test(int n=1) {val=n; cout<<"Con."<<endl; }
Test(const Test& t) {val=t.val; cout<<"Copy con."<<endl;}
Test& operator = (Test& t)
{
val=t.val;
cout<<"Assignment."<<endl;
return *this;
}
private:
int val;
};
void main()
{
Test t1(1);
Test t2=t1;
Test t3;
t3=t1;
fun1(t2);
t3=fun2();
}
void fun1(Test t){}
Test fun2()
{
Test t;
return t;
}
2
、
#include <iostream.h>
class A
{
public:
A() {cout<<"A's con."<<endl;}
~A(){cout<<"A's des."<<endl; }
};
class B
{
public:
B() {cout<<"B's con."<<endl;}
~B(){cout<<"B's des."<<endl; }
};
class C:public A,public B
{
public:
C():member(),B(),A() {cout<<"C's con."<<endl;}
~C(){cout<<"C's des."<<endl; }
private:
A member;
};
void main()
{
C obj;
}
3
、
#include <iostream.h>
class R
{
public:
R(int r1,int r2) {R1=r1;R2=r2;}
void print();
void print() const;
private:
int R1,R2;
};
void R::print()
{
cout<<R1<<":"<<R2<<endl;
}
void R::print() const
{
cout<<R1<<";"<<R2<<endl;
}
void main()
{
R a(5,4);
a.print();
const R b(20,52);
b.print();
}
4
、
#include <iostream.h>
class A
{
public:
virtual void act1();
void act2() {act1();}
};
void A::act1()
{
cout<<"A::act1() called. "<<endl;
}
class B : public A
{
public:
void act1();
};
void B::act1()
{
cout<<"
B
::act1() called. "<<endl;
}
void main()
{
B b;
b.act2();
}
转载于:https://blog.51cto.com/jeick/144561