文档库

最新最全的文档下载
当前位置:文档库 > 类与对象测试题

类与对象测试题

类和对象练习

选择题

单选题

1.下面对静态数据成员的描述中,正确的是( )

A. 静态数据成员可以在类体内进行初始化

B. 静态数据成员不可以被类的对象调用

C. 静态数据成员不能受private控制符的作用

D. 静态数据成员可以直接用类名调用

2.下面关于友元函数的描述中,正确的是( )

A. 友元函数的实现必须在类的内部定义

B. 友元函数是类的成员函数

C. 友元函数破坏了类的封装性和隐藏性

D. 友元函数不能访问类的私有成员

3.下列关于new运算符的描述中,错误的是( )

A. 使用运算符new创建对象组时必须定义初始值

B. 使用运算符new创建对象时,会调用类的构造函数

C. 运算符new可以用来动态创建对象和对象数组

D. 使用new运算符创建的对象可以运用运算符delete删除

4.下列对类的构造函数和析构函数的描述中,正确的是( )

A. 构造函数可以重载,析构函数不能

B. 构造函数不能重载,析构函数可以

C. 构造函数可以重载,析构函数也可以重载

D. 构造函数不能重载,析构函数也不能重载

5.在C++中,数据封装要解决的问题是( )

A. 数据的规范化

B. 便于数据转换

C. 避免数据丢失

D. 防止不同模块之间数据的非法访问

6.假定MyClass为一个类,那么下列的函数说明中,( )为该类的析构函数.

A. void ~MyClass();

B. ~MyClass(int n);

C. MyClass();

D. ~MyClass();

7.为了使类中的成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为

A. public

B. protected

C. private

D. static

8.下列对与拷贝初始化构造函数的描述中,正确的( )

A. 在C 语言中,如果不自定义类的拷贝初始化构造函数,则每个类都有默认的拷贝初始化构造函数

B. 必须为每个类定义拷贝初始化构造函数

C. 如果要使用拷贝初始化构造函数,则必须在类中定义

D. 当定义了类的构造函数时,如果要使用拷贝初始化构造函数,则必须定义拷贝初始化构造函数

9.对于下面定义的类MyClass,在函数f()中将对象成员n的值修改为50的语句(划线处)应该是( )

class MyClass

{

public:

MyClass(int x)

{

n=x;

}

void SetValue(int n1)

{

n=n1;

}

private:

int n;

};

int f()

{

MyClass *ptr=new MyClass(45); __________;

}

A. MyClass(50)

B. SetValue(50)

C. ptr - > SetValue(50)

D. ptr - > n=50

10.类MyClass的定义如下:

class MyClass

{

public:

MyClass()

{

value=0;

}

setVariable(int i)

{

value=i;

}

private:

int value;

};

则以下各项对如下语句序列的描述中,正确的是( ).

MyClass *p , my; p = &my;

A. 语句”p = &my;”是把对象my赋值给指针变量p

B. 语句”MyClass *p , my;”会调用两次类MyClass的构造函数

C. 对语句”*p.SetVariable(5)”的调用是正确的

D. 语句”p - > SetVariable(5)”与语句”my.SetVariable(5)”等价

11.下面类的定义,有( )错误.class MyClass{int i=0;public:void MyClass();~MyClass(int Value);};

A. 1

B. 2

C. 3

D. 4

[答案] C

12.定义析构函数时,应该注意( )

A. 其名与类名完全相同

B. 返回类型是void类型

C. 无形参,也不可重载

D. 函数体中必须有delete语句

13.构造函数不具备的特征的是( )

A. 构造函数的函数名与类名相同

B. 构造函数可以重载

C. 构造函数可以设置默认参数

D. 构造函数必须指定返回类型

14.类的析构函数是在什么时间被自动调用的?

A. 类创建时

B. 创建对象时

C. 删除对象时

D. 不自动调用

15.对于任何一个类,析构函数最多有( ) 个

A. 0

B. 1

C. 2

D. 3

16.通常,拷贝构造函数的参数是( )

A. 某个对象名

B. 某个对象的成员名

C. 某个对象的引用名

D. 某个对象的指针名

17.面向对象程序设计中的数据隐藏指的是( )

A. 输入数据必须输入保密口令

B. 数据经过加密处理

C. 对象内部数据结构上建有防火墙

D. 对象内部数据结构的不可访问性

18.下列关于类的访问权限的描述中,错误的是( ).

A. 说明为公有的成员可以被程序中的任

何代码访问

B. 说明为私有的成员只能被类的成员和说明为友元类的成员函数访问

C. 说明为保护的成员,除了能被本身的成员函数和说明为友元类的成员函数访问外,该类的派生类的成员也可以访问

D. 类的所有成员都可以被程序中的任何代码访问

19.一个类的友元函数或友元类可以访问该类的( )

A. 私有成员

B. 保护成员

C. 公有成员

D. 所有成员

20.下列关于成员函数特征的描述中,错误的是( )

A. 成员函数一定是内联函数

B. 成员函数可以重载

C. 成员函数可以设置参数的默认值

D. 成员函数可以是静态的

填空题

1. 一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为_______权限,而把成员函数(方法)定义为______权限。

2. 对类中成员函数和属性的访问是通过______、_______、______这3个关键字来控制的。

3. 假定AB为一个类,则执行”AB a[10];”语句时,系统自动调用该类的构造函数的次数为________。

4. 要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入语句________。

5. 在定义类的对象时,C++ 程序将自动调用该对象的_____函数初始化对象自身。

6. ______运算符对指定类型对象动态分配内存并返回该类型的_____。

7. 在撤消类的对象时,C++程序将自动调用

该对象的_______函数。

程序阅读

1. #include using namespace std; class A

{

int x;

public:

A(int a)

{

x=a;

}

friend class B;

};

class B

{

public:

void print(A a)

{

a.x--;

cout<

}

};

void main()

{

A a(10);

B b;

b.print(a);

}

2. #include #include using namespace std; class point

{

double x;

double y;

public:

point(double a,double b) {

x=a;

y=b;

}

friend double distance(point a,point b); };

double distance(point a,point b)

{

return

sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); }

void main()

{

point p1(1,2);

point p2(5,2);

cout<

}

3. #include

using namespace std;

class sample

int x;

static int y;

public:

sample(int a);

static void print(sample s);

};

sample::sample(int a)

{

x=a;

y+=x;

}

void sample::print(sample s)

{

cout<<"x="<

int sample::y=0;

void main()

{

sample s1(10);

sample s2(20);

sample::print(s2);

4. #include using namespace std; class sample

{

int i;

public:

void setvalue(int m) {

i=m;

}

void fun(int m)

{

i+=m;

}

void disp()

{

cout<

}

void main()

{

sample *ps;

ps=new sample;

ps->setvalue(20);

ps->fun(5);

ps->disp();

}

5. #include using namespace std; class point

{

int x,y;

public:

point()

{

x=0;y=0;

}

void setpoint(int x1,int y1)

x=x1;

y=y1;

}

void dispoint()

{

cout<<"x="<

};

void main()

{

point *p=new point;

p->setpoint(5,12);

p->dispoint();

}

6. #include

using namespace std;

class MyClass

{

public:

void DisplayMessage(const char*Text,int Type) {

cout<<"Message:Text="<

cout<<"Text="<

}

void DisplayMessage(const char*Text,unsigned int Type)

{

cout<<"Message:Text="<

cout<<"Text="<

}

};

void main()

{

unsigned char value=0;

MyClass my;

my.DisplayMessage("Hello",value);

}

7. #include