}
结果:
Themain'snumis10
TheFun'snumis20
TheField'snumis30
Themain'snumis10
类和对象
2.1选择题
下列的各类函数中,不是类的成员函数。
(C)
A)构造函数B)析构函数C)友元函数D)拷贝初始化构造函数
作用域运算符“:
:
”的功能是:
(B)
A)标识作用域的级别的B)指出作用域的范围的
C)给定作用域的大小的D)标识成员是属于哪个类的
已知:
print()函数是一个类的常成员函数,它无返回值,下列表示中,是正确的。
(A)
A)voidprint()const;B)constvoidprint();
C)voidconstprint():
D)voidprint(const);
在类定义的外部,可以被访问的成员有(C)
A)所有类成员B)private的类成员
C)public的类成员D)public或private的类成员
关于类和对象不正确的说法是:
(C)
A)类是一种类型,它封装了数据和操作B)对象是类的实例
C)一个类的对象只有一个D)一个对象必属于某个类
在C++中实现封装是借助于(B)
A)枚举B)类C)数组D)函数
定义析构函数时,应该注意:
(C)
A)其名与类名完全相同B)返回类型是void类型
C)无形参,也不可重载D)函数体中必须有delete语句
类claseCC1的说明如下,错误的语句是:
(A)
claseCC1{
inta=2;//(A)
CC1();//(B)
public:
CC1(intval);//(C)
~CC1();//(D)
};
类的指针成员的初始化是通过函数完成的,这个函数通常是:
(B)
A)析构函数B)构造函数C)其它成员函数D)友元函数
关于构造函数的说法,不正确的是:
(A)
A)没有定义构造函数时,系统将不会调用它B)其名与类名完全相同
C)它在对象被创建时由系统自动调用D)没有返回值
通常拷贝构造函数的参数是:
(C)
A)对象名B)对象的成员名C)对象的引用名D)对象的指针名
关于成员函数特征的描述中,错误的是:
(A)
A)成员函数一定是内联函数B)成员函数可以重载
C)成员函数可以设置参数的默认值D)成员函数可以是静态的
下列关于构造函数的描述中,错误的是:
(D)
A)构造函数可以设置默认参数;B)构造函数在定义类对象时自动执行
C)构造函数可以是内联函数;D)构造函数不可以重载
有如下类声明“classA{intx;……};”,则A类的成员x是:
(B)
A)公有数据成员B)私有数据成员C)公有成员函数D)私有成员函数
类TM和类TN是两个独立的类,那么类TM中哪种形式的数据成员一定是不允许的:
(C)
A)TM*aB)TN&aC)TMaD)TNa;
以下关于this指针的叙述中正确的是:
(D)
A)任何与类相关的函数都有this指针;B)类的成员函数都有this指针;
C)类的友员函数都有this指针;D)类的非静态成员函数才有this指针;
.关于类模板的说法正确的是:
(B)
A)类模板的主要作用是生成抽象类
B)类模板实例化时,编译器将根据给出的模板实参生成一个类
C)在类模板中的数据成员具有同样类型
D)类模板中的成员函数没有返回值
.以下关键字不能用来声明类的访问权限的是:
(C)
A)publicB)privateC)staticD)protected
.类的私有成员可在何处访问(D)
A)通过子类的对象访问B)本类及子类的成员函数中
C)通过该类对象访问D)本类的成员函数中
.如果没有为一个类定义任何构造函数的情况下,下列描述正确的是:
(A)
A)编译器总是自动创建一个不带参数的构造函数B)这个类没有构造函数
C)这个类不需要构造函数D)该类不能通过编译
.一个类可包含析构函数的个数是:
(B)
A)0个B)1个C)0个或1个D)0个或多个
.一个类可包含构造函数的个数是:
(D)
A)0个B)0个或1个C)0个或多个D)1个或多个
.this指针存在的目的是:
(B)
A)保证基类公有成员在子类中可以被访问
B)保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码
C)保证基类保护成员在子类中可以被访问
D)保证基类私有成员在子类中可以被访问
.下列关于类的权限的描述错误的是:
(A)
A)类本身的成员函数只能访问自身的私有成员
B)类的对象只能访问该类的公有成员
C)普通函数不能直接访问类的公有成员,必须通过对象访问
D)一个类可以将另一个类的对象作为成员
.设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是:
(B)
A)A类构造函数先执行B)成员构造函数先执行
C)两者并行执行D)不能确定
.假定有类AB,有相应的构造函数定义,能正确执行“ABa(4),b(5),c[3],*p[2]={&a,&b};”语句,请问执行完此语句后共调用该类构造函数的次数为(C)
A)3B)4C)5D)6
拷贝构造函数的作用是(C)。
A.进行数据类型的转换B.用对象调用成员函数
C.用对象初始化对象D.用一般类型的数据初始化对象
下列静态数据成员的特性中,错误的是(D)。
A.静态数据成员的声明以关键字static开头
B.静态数据成员必须在文件作用域内初始化
C.引导数据成员时,要在静态数据成员前加(类名)和作用域运算符
D.静态数据成员不是类所有对象共享的
通过指针访问类对象成员的方法是(D)。
A.:
:
B.; C.. D.->
静态成员函数没有(B)。
A.返回值 B.this指针 C.指针参数 D.返回类型
在下列关键字中,用于说明类中公有成员的是(A)。
A.public;B.private;C.protected;D.friend
不是构造函数的特征(D)。
A.构造函数的函数名与类名相同; B. 构造函数可以重载;
C.构造函数可以设置缺省参数; D. 构造函数必须指定类型说明。
是析构函数的特征(A)。
A.一个类中只能定义一个析构函数; B. 析构函数名与类名不同;
C. 析构函数的定义只能在类体内; D. 析构函数可以有一个或多个参数。
关于成员函数特征的下述描述中,(A)是错误的。
A.成员函数一定是内联函数; B. 成员函数可以重载;
C.成员函数可以设置参数的缺省值; D. 成员函数可以是静态的。
下述静态数据成员的特性中,(D)是错误的。
A.说明静态数据成员时前边要加修饰符static;
B.静态数据成员要在类体外进行初始化;
C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;
D.静态数据成员不是所有对象所共用的。
2.2填空题
1、在撤销类的对象时,C++程序将自动调用该对象的__析构___函数。
2、类中的构造函数是一个特殊的成员函数,它由类的对象__自动_调用,它的作用是___为对象分配内存,数据成员初始化___。
3、对类中的成员函数和属性的访问是通过__public__、__protected__和___private__这3个关键字来控制的。
4、__delete__运算符删除new运算符所动态分配的内存空间。
5、假定用户没有给一个名为MyClass的类定义析构函数,则系统为其定义的默认析构函数形式为__MyClass()__。
6、类中构造函数有__一个或多__个,析构函数有___一___个。
7、类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的___数据成员___,共同行为被描述为类中的__成员函数__。
8、若要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入语句_friendclassFriendClass;___。
9、在结构定义中,数据和成员函数默认权限是__public__。
在类定义中,数据和成员函数默认权限是__private___。
10、在下面程序的横线处填上适当的语句,使类型该程序执行结果为10。
#include
classMyClass
{
pub1ic:
___MyClass(inta){_x=a;}____//为x置值
__intGetNum(){returnx;}______//取x值
private:
intx;
};
voidmain()
{
Myclassmy(10);
Cout<}
11、完成下面的类定义。
ClassMyClass
{
public:
MyClass(){x=0;}
____friend______intGetNum(___MyClass______my);
private:
intx;
};
intGetNum(____MyClass______my)
{
___returnmy.x;
}
12、__new__运算符对指定类型对象动态分配内存并返回该类型的__指针__。
13、若要把函数voidFriendFunction()定义为类MyClass的友元函数,则应在类MyClass的定义中加入语句__friendvoidFriendFunction();_______。
14、类的具体表现是通过定义_对象__来操作的。
15、在定义类的对象时,C++程序将自动调用该对象的__构造___函数初始化对象自身。
16、一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为__private__权限,而把成员函数(方法)定义为__public__权限。
17、在类中定义和实现的函数称为_内联函数__。
18、非成员函数应声明为类的__友元函数__才能访问这个类的private成员。
2.3简答题
A、类的含义
B、构造函数的特点
C、拷贝构造函数的调用
D、析构函数的定义及其特点
E、静态成员的分类及各自的特点
2.4程序阅读题
1)写出下列程序的运行结果。
#include
classMyClass
{
charch;
public:
MyClass();
MyClass(charcharacter);
voidPrint();
~MyClass();
};
MyClass:
:
MyClass()
{
cout<<"Thisisaconstructor!
"<ch='a';
}
MyClass:
:
MyClass(charcharacter)
{
cout<<"Thisisaconstructor!
"<ch=character;
}
voidMyClass:
:
Print()
{
cout<<"Thevalueofchis"<}
MyClass:
:
~MyClass()
{
cout<<"Thisisadestructor!
"<}
voidmain()
{
MyClassfirst,second('b');
first.Print();
second.Print();
}
运行结果:
Thisisaconstructor!
Thisisaconstructor!
Thevalueofchisa
Thevalueofchisb
Thisisadestructor!
Thisisadestructor!
2)写出下列程序的运行结果
#include
classMyClass
{
public:
MyClass();
voidPrint();
~MyClass();
private:
intI;
staticintj;
};
intMyClass:
:
j=0;
MyClass:
:
MyClass()
{
cout<<"Thisisconstructor!
"<j+=10;
}
voidMyClass:
:
Print()
{
cout<<"Thevalueofjis"<}
MyClass:
:
~MyClass()
{
cout<<"Thisisadestructor!
"<}
voidmain()
{
MyClassfirst,second;
first.Print();
second.Print();
}
Thisisconstructor!
Thisisconstructor!
Thevalueofjis20
Thevalueofjis20
Thisisadestructor!
Thisisadestructor!
继承与派生
3.1选择题
.在C++中,类与类之间的继承关系具有(C)
A)自反性B)对称性C)传递性D)反对称性
.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(B