当前位置:文档之家› c++第2章_类和对象习题

c++第2章_类和对象习题

《面向对象程序设计》习题

班级:学号:姓名:名单序号:成绩:

第2章类与对象

一、选择题(共26分,每题1分)

1.下列有关类的说法不正确的是()。

A.对象是类的一个实例

B.任何一个对象只能属于一个具体的类

C.一个类只能有一个对象

D.类与对象的关系和数据类型与变量的关系相似

2.下面()项是对构造函数和析构函数的正确定义。

A.void X::X(), void X::~X()

B.X::X(参数), X::~X()

C.X::X(参数), X::~X(参数)

D.void X::X(参数), void X::~X(参数)

3.()的功能是对象进行初始化。

A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数

4.下列表达方式正确的是()。

A.class P{ B. class P{

public: public:

int x=15; int x;

void show(){cout<

}; }

C. class P{ D. class P{

int f; public:

}; int a;

f=25; void Seta (int x) {a=x;} };

5.拷贝构造函数具有的下列特点中,()是错误的。

A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的

B.拷贝构造函数只有一个参数,并且是该类对象的引用

C.拷贝构造函数是一种成员函数

D.拷贝构造函数的名字不能用类名

6.关于静态成员的描述中,()是错误的。

A.静态成员可分为静态数据成员和静态成员函数

B.静态数据成员定义后必须在类体内进行初始化

C.静态数据成员初始化不使用其构造函数

D.静态数据成员函数中不能直接引用非静态成员

7.关于友元的描述中,()是错误的。

A.友元函数是成员函数,它被说明在类体内

B.友元函数可直接访问类中的私有成员

C.友元函数破坏封装性,使用时尽量少用

D.友元类中的所有成员函数都是友元函数

8.对类的构造函数和析构函数描述正确的是()。

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

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

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

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

9.类的析构函数的作用是( D )。

A.一般成员函数

B.类的初始化

C.对象初始化

D.删除对象

10.假设OneClass为一个类,则该类的拷贝初始化构造函数的声明语句为()。

A.OneClass(OneClass p);

B. OneClass& (OneClass p);

C. OneClass(OneClass & p);

D. OneClass (OneClass *p);

11.下面对于友元函数描述正确的是()。

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

B.友元函数是类的成员

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

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

12.对于结构中定义的成员,其默认的访问权限为()。

A.public

B. protected

C.private

D. static

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

A.public

B. protected

C.private

D. static

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

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

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

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

D.静态数据成员调用前必须初始

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

A.静态数据成员是类的所有对象共享的数据

B.类的每一个对象都有自己的静态数据成员

C.类的不同对象有不同的静态数据成员值

D.静态数据成员不能通过类的对象调用

16.下列有关类的说法不正确的是。

A.类是一种用户自定义的数据类型

B.只有类中的成员函数或类的友元函数才能存取类中的私有数据

C.在类中(用class定义),如果不作特别说明,所有的数据均为私有数据

D.在类中(用class定义),如果不作特别说明,所有的成员函数均为公有数据17.以下有关析构函数的叙述不正确的是( )

A. 在一个类只能定义一个析构函数

B. 析构函数和构造函数一样可以有形参

C. 析构函数不允许用返回值

D. 析构函数名前必须冠有符号“~”

18.以下有关类与结构体的叙述不正确的是( )

A. 结构体中只包含数据;类中封装了数据和操作

B. 结构体的成员对外界通常是开放的;类的成员可以被隐藏

C. 用struct不能声明一个类型名;而class可以声明一个类名

D. 结构体成员默认为public;类成员默认为private

19.以下叙述中不正确的是( )

A. 一个类的所有对象都有各自的数据成员,可以共享函数成员

B. 一个类中可以有多个同名的成员函数

C. 一个类中可以有多个构造函数、多个析构函数

D. 在一个类中可以声明另一个类的对象作为它的数据成员20.以下不属于构造函数特征的是( )

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

B. 构造函数可以重载

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

D. 构造函数必须指定函数类型21.以下有关类和对象的叙述不正确的是( )

A. 任何一个对象都归属于一个具体的类

B. 类与对象的关系和数据类型与变量的关系相似

C. 类的数据成员不允许是另一个类的对象

D. 一个类可以被实例化成多个对象

22.设有定义:

class person

{ int num;

char name[10];

public:

void init(int n, char *m);

...

};

person std[30];

则以下叙述不正确的是( )

A. std是一个含有30个元素的对象数组

B. std数组中的每一个元素都是person类的对象

C. std数组中的每一个元素都有自己的私有变量num和name

D. std数组中的每一个元素都有各自的成员函数init

23.设有以下类的定义:

class Ex

{ int x;

public:

void setx(int t=0);

};

若在类外定义成员函数setx(),以下定义形式中正确的是( )

A. void setx(int t) { ... }

B. void Ex::setx(int t) { ... }

C. Ex::void setx(int t) { ... }

D. void Ex::setx(){ ... }

24.以下关于静态成员变量的叙述不正确的是()A.静态成员变量为类的所有对象所公有

B.静态成员变量可以在类内任何位置上声明

C.静态成员变量的赋初值必须放在类外

D.定义静态成员变量时必须赋初值

25.定义静态成员函数的主要目的是()

A.方便调用B.有利于数据隐藏

C.处理类的静态成员变量D.便于继承

26.以下叙述不正确的是(),使用静态数据成员:

A.可以节省内存空间B.是为了解决数据共享问题

C.可以直接用类名来引用 D.可以提高序运算速度

二、填空题(共18分,每题1分)

1.设有如下程序结构:

class Box

{ … };

void main()

{Box A,B,C; }

该程序运行时调用次构造函数;调用次析构函数。

2.设A为test类的对象且赋有初值,则语句test B(A); 表示。

3.利用“对象名.成员变量”形式访问的对象成员仅限于被声明为的成员;若要访问其他成员变量,需要通过函数或函数。

4.OOP技术由、、方法、消息和继承五个基本的概念所组成。

5.类的成员函数可以在定义,也可以在定义。

6.类test的构造函数是和__________同名的函数,析构函数名是。

7.类是用户定义的类型,具有类类型的变量称作______ 。

8.一个类的析构函数不允许有。

9.建立对象时,为节省内存,系统只给________分配内存。

10.类中的数据和成员函数默认访问类型为。

11.当建立一个新对象时,程序自动调用________。

12.成员函数在类体外定义格式是:______________________________________。

三、改错题(共10分,每题2分)

1.下面的程序定义了一个Point类,找出程序中的错误语句并改正。

#include

class Point{

int x;

public:

void Point(int a)

{x=a;}

int Getx(){return x;}

void Show()

{cout<

} ;

void main()

{Point A(76);

cout<

}

2.根据静态成员的特点,指出下列程序的错误。

#include

#include

class Part

{ public:

Part(char *pname=”no name”)

{ strncpy(name,pname);

noofpart++;

no=noofpart;

cout<<”create the no: ”<

}

~Part()

{ noofpart--;

cout<<”destroy the no: ”<

}

static int number() { return no; }

protected:

static int noofpart=0;

int no;

char name[40];

};

void main()

{ Part p1;

Part p2;

}

3.以下程序的功能是:利用友员函数为类的成员变量进行初始化,然后利用成员函数输出。请改正程序中的错误,使之能正确运行。

#include

class A

{ int a,b;

public:

friend void setval(int i,int j);

void showA()

{cout<

};

void setval(int i,int j)

{a=i; b=j;}

void main()

{A obj1;

setval(2,3);

obj1.showA();

}

4.分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。

#include

class one

{ int a1,a2;

public:

one(int x1=0, x2=0);

};

void main()

{one data(2,3);

cout<

cout<

}

5.分析以下程序的错误原因,给出修改方案使之能正确运行。

#include

class Amplifier{

float invol,outvol;

public:

Amplifier(float vin,float vout)

{invol=vin;outvol=vout;}

float gain();

};

Amplifier::float gain() { return outvol/invol; }

void main()

{ Amplifier amp(5.0,10.0);

cout<<"\n\nThe gain is =>"<

}

四、看程序写结果(共16分,每题4分)

1.#include

class test

{ public:

test();

test(int);

~test();

void display();

protected:

int n;

};

test::test() {cout<<”Constructing normally\n”;}

test::test(int num)

{n=num;

cout<<”Constructing with a number: ”<

}

void test::display() {cout<<”Display a number: ”<

test::~test(){cout<<”Destructing”<

void main()

{ test obj1;

test obj2(59);

obj1.display();

obj2.display();

}

2.#include

class Count

{ public:

Count() { count++;}

static int getn() {return count;}

~Count() { count--; }

private:

static int count;

};

int Count::count=100;

void main()

{ Count c1,c2,c3,c4;

cout<

}

3.#include

class myclass

{ int a,b;

public:

void init(int i, int j)

{a=i; b=j;}

friend int sum(myclass x);

};

int sum( myclass x)

{return x.a+x.b; }

void main()

{myclass y;

y.init(15,20);

cout<

}

4.#include

class point

{ int x,y;

public:

point(int a,int b)

{x=a;y=b;

cout<<"calling the constructor function."<

}

point(point &p);

friend point move(point q);

~point(){cout<<"calling the destructor function.\n";}

int getx() {return x;}

int gety() {return y;}

};

point::point(point &p)

{x=p.x; y=p.y;

cout<<"calling the copy_initialization constructor function.\n";

}

point move(point q)

{cout<<"OK!\n";

int i,j;

i=q.x+10;

j=q.y+20;

point r(i,j);

return r;

}

void main()

{ point m(15,40),p(0,0);

point n(m);

p=move(n);

cout<<"p="<

}

五、编程题(共30分,每题10分)

1.某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记下目前库存货物的总量,要求把商店货物购进和卖出的情况模拟出来。

2.定义一个Car类和Truck类,用友元实现两类对象行使速度的快慢比较。

3.定义一个学生类,其中有3个数据成员:学号、姓名、年龄,以及若干成员函数。同时编写main函数使用这个类,实现对学生数据的赋值和输出。

相关主题
文本预览
相关文档 最新文档