面向对象程序设计复习题文档格式.docx

上传人:b****6 文档编号:21759787 上传时间:2023-02-01 格式:DOCX 页数:21 大小:22.64KB
下载 相关 举报
面向对象程序设计复习题文档格式.docx_第1页
第1页 / 共21页
面向对象程序设计复习题文档格式.docx_第2页
第2页 / 共21页
面向对象程序设计复习题文档格式.docx_第3页
第3页 / 共21页
面向对象程序设计复习题文档格式.docx_第4页
第4页 / 共21页
面向对象程序设计复习题文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

面向对象程序设计复习题文档格式.docx

《面向对象程序设计复习题文档格式.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计复习题文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

面向对象程序设计复习题文档格式.docx

DerivedobjD2=objB;

//D

8.下面对派生类的描述中,正确的是( B )。

A、派生类是对基类的抽象

B、一个派生类可以作为另一个派生类的基类

C、派生类只能有一个直接基类

D、派生类的缺省继承方式是public

9.实现动态联编必须通过(A  )调用虚函数。

A、基类引用B、类名C、对象名D、构造函数

10.C++流中重载的运算符>

>

,是一个(B)。

A、用于输出操作的非成员函数B、用于输入操作的非成员函数

C、用于输出操作的成员函数D、用于输入操作的成员函数

11.(A)不是基于对象系统包含的要素。

A、多态B、对象C、类D、继承

12.下列对常量的定义中,错误的是( C )。

A、intconstsize=10;

B、char*constp="

GoodLuck"

C、voidconstprint();

  D、constMyClassobj(10,10);

13.设Address表示整型变量x的地址,则下列语句执行后的输出结果为(D  )。

intx=100,&

r=x;

cout<

<

x<

'

-'

r<

endl;

A、Address-100B、100-Address

C、Address-AddressD、100-100

14.若函数原型为voidFun(intx=9,inty=8,charz='

7'

),则下列调用错误的是(B)。

A、Fun()B、Fun(“hello”)

C、Fun(1,2)D、Fun(2,4,'

a'

15.若有如下函数声明:

,则下列( C )不能与该函数形成重载。

A、voidFun(intx,inty);

B、voidFun(doublex);

C、voidFun(intx,inty=1);

D、voidFun(intx)const;

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

A、析构函数不可以重载

B、构造函数不能定义为内联函数

C、构造函数中不能设置参数的缺省值

D、析构函数名与类名相同

17.下面对静态成员的描述中,错误的是( C )。

A、静态数据成员的提出是为了解决数据共享问题

B、静态数据成员的初始化在类体外进行

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

D、静态成员函数可以直接访问类中的静态数据成员

18.下列对友元的描述中,正确的是( D )。

A、友元可以在类外声明和定义

B、友元降低了程序的运行效率

C、友元不能访问类中的保护成员

D、友元破坏了类的封装性

19.下列对继承的描述中,错误的是( C )。

A、派生类对象不能访问基类的保护成员

B、派生类对基类成员的访问权限随着继承方式而改变

C、派生类成员可以访问基类的私有成员

D、派生类继承了基类的所有数据成员

20.程序中,编译时出错的语句是(D )。

21.下面对派生类的描述中,错误的是( D )。

A、派生类是对基类的具体化

B、派生类能够作为基类继续派生新类

C、派生类可以有多个直接基类

D、派生类的缺省继承方式是private

22.实现动态联编不能通过(A  )调用虚函数。

A、构造函数B、基类引用C、基类指针D、基类指针或引用

23.下面( D )不是抽象类的特性。

A、可以说明纯虚函数

B、不能说明抽象类的对象

C、用做基类,提供公共的接口

D、可以定义虚构造函数

24.C++流中重载的运算符<

,是一个(B)。

A、用于输出操作的成员函数B、用于输出操作的非成员函数

C、用于输入操作的成员函数D、用于输入操作的非成员函数

25:

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

A. 

对象是类的一个实例

B. 

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

C. 

一个类只能有一个对象

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

答案:

C

分析:

对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。

 

26:

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

A.voidX:

:

X(),voidX:

~X()

B.X:

X(参数),X:

C.X:

~X(参数)

D.voidX:

X(参数),voidX:

B

分析构造函数无返回类型、可带参数、可重载;

析构函数无返回类型、不可带参数、不可重载。

27:

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

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

当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;

当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作;

28:

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

A.classP{B.classP{

public:

public:

intx=15;

intx;

voidshow(){cout<

x;

}voidshow(){cout<

}

};

}

C.classP{D.classP{

intf;

inta;

f=25;

voidSeta(intx){a=x;

}};

D

在类体内不可对数据成员进行初始化;

类定义结束时需用分号;

只有类中的成员函数才能存取类中的私有数据。

29:

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

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

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

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

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

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

拷贝构造函数至少有一个参数,并且是该类对象的引用;

拷贝构造函数的名字与类同名,并且不被指定返回类型;

拷贝构造函数是一种成员函数。

30:

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

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

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

静态数据成员初始化不能在构造函数中完成

D. 

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

静态成员可分为静态数据成员和静态成员函数;

静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;

静态数据成员初始化与该类的构造函数和析构函数无关;

在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。

31:

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

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

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

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

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

A

友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;

由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。

二、填空题

1.下列运算符既可以作为类的成员函数重载,也可以作为类的友元函数重载,请在表格中的空白处填上正确的表达式。

表达式

成员函数

友元函数

a+b

(1)

(2)

a++

(3)

operator++(a)

-a

a.operator-()

(4)

1.答案:

(1)a.operator+(b)

(2)operator+(a,b)

(3)a.operator++()(4)operator–(a)

2.下列程序执行后的输出结果是12,21,22,请将下列程序补充完整。

#include<

iostream.h>

voidfun1( 

(1) ,intb){intc;

c=a;

a=b;

b=c;

voidfun2( 

(2) ,int*b){intc;

c=*a;

 (3) ;

*b=c;

voidfun3( (4) ,intb){intc;

 (5) ;

b=c;

voidmain(){

intx,y;

x=1;

y=2;

fun1(x,y);

y<

'

fun2(&

x,&

y);

fun3(x,y);

2.答案:

(1)inta

(2)int*a(3)*a=*b

(4)int&

a(5)a=b

3.下列程序执行后的输出结果是B0D00B1D23~D~B~D~B,请将下列程序补充完整。

classBase{

public:

Base(inti=0){x=i;

B'

'

~Base(){cout<

"

~B"

private:

intx;

};

publicBase{

inty,z;

__________________

(1)________________________//Constructor

__________________

(2)________________________//Destructor

voidmain(){

Derivedobj1;

Derivedobj2(1,2,3);

答案:

(1)Derived(inta=0,intb=0,intc=0):

Base(a){y=b;

z=c;

D'

z<

}

(2)~Derived(){cout<

~D"

4:

设有如下程序结构:

classBox

{…};

voidmain()

{BoxA,B,C;

该程序运行时调用

(1)次构造函数;

调用

(2)次析构函数。

(1)3

(2)3

每创建一个对象自动调用一次构造函数,在这里创建了A、B、C三个对象,所以共调用了三次构造函数;

每释放一个对象,系统自动调用一次析构函数,A、B、C对象释放时,分别调用析构函数,所以析构函数共调用了三次。

5:

设A为test类的对象且赋有初值,则语句testB(A);

表示。

用对象A初始化对象B。

执行testB(A);

语句相当于调用了默认拷贝构造函数,用对象A初始化对象B。

6:

在类外,利用“对象名.成员名”的形式访问的对象成员仅限于被声明为

(1)的成员;

若要访问其他成员变量,需要通过

(2)函数或(3)函数。

(1)public

(2)成员(3)友元

类体内的数据成员可声明为公有的、私有的和保护的,公有的数据成员可利用“对象名.成员名”形式来进行访问;

私有的数据成员能被类中的成员函数或友元函数所调用;

保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对象使用。

三、写程序结果题

1.#include<

classTest{

Test(doublem,doublen,doubled):

p(d){x=m;

y=n;

voidShow();

voidShow()const;

doublex,y;

constdoublep;

voidTest:

Show(){

"

p="

p<

Show()const{

const"

Testa(8.9,2.5,3.1416);

a.Show();

constTestb(2.5,8.9,3.14);

b.Show();

8.92.5

p=3.1416

2.58.9const

p=3.14const

2.#include<

classA{

A(inti){cout<

Constructor"

p=newint(i);

A(A&

r){cout<

Copyconstructor"

p=newint(r.p);

~A(){cout<

Destructor"

deletep;

A&

operator=(A&

r);

voidoutput(){cout<

*p<

int*p;

A&

A:

operator=(A&

r){

cout<

Assignment"

if(this==&

r)return*this;

deletep;

p=newint(r.p);

return*this;

Aa(5);

Ab=a;

Ac(6);

c=a;

c.output();

Constructor

Copyconstructor

Assignment

5

Destructor

Destructor

3.#include<

classBase1{

Base1(intx){cout<

Base1'

scon."

~Base1(){cout<

sdes."

classBase2{

Base2(intx){cout<

Base2'

~Base2(){cout<

publicBase2,publicBase1{

Derived(intx,inty):

Base1(y),Base2(x){cout<

Derived'

scon."

~Derived(){cout<

sdes."

Derivedobj(1,2);

scon.1

scon.2

scon.

sdes.

Base2'

sdes.

4.#include<

classA{

inta,b;

public:

A(){

a=b=0;

cout<

DefaultConstructingObject"

a<

b<

A(intaa,intbb){

a=aa;

b=bb;

ConstructingObject"

}

~A(){cout<

DestructingObject"

{

Ax,y(2,3),z(4,5);

DefaultConstructingObject00

ConstructingObject23

ConstructingObject45

DestructingObject45

DestructingObject23

DestructingObject00

5.#include<

template<

classTT>

classFF{

TTa1,a2,a3;

FF(TTb1,TTb2,TTb3){

a1=b1;

a2=b2;

a3=b3;

TTSum(){returna1+a2+a3;

FF<

int>

x(2,3,4),y(5,7,9);

cout<

x.Sum()<

'

y.Sum()<

921

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

#include<

classone

{

inta1,a2;

public:

one(intx1=0,x2=0);

onedata(2,3);

data.a1<

data.a2<

出错原因:

构造函数参数表语法错;

构造函数没有函数体;

类的对象不能直接访问类的私有成员。

改正后的程序如下:

#include<

classone

{inta1,a2;

one(intx1=0,intx2=0){a1=x1;

a2=x2;

intgeta1(){returna1;

intgeta2(){returna2;

{onedata(2,3);

data.geta1()<

data.geta2()<

7:

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

classAmplifier{

floatinvol,outvol;

Amplifier(floatvin,floatvout)

{invol=vin;

outvol=vout;

floatgain();

Amplifier:

floatgain(){returnoutvol/invol;

{Amplifieramp(5.0,10.0);

\n\nThegainis=>

gain()<

成员函数在类体外定义格式是:

函数返回类型类名:

成员函数名(参数表);

成员函数调用格式是:

对象名.成员函数名(参数表)。

classAmplifier

{floatinvol,outvol;

Amplifier(floatvin,floatvout){invol=vin;

floatAmplifier:

gain(){returnoutvol/invol;

amp.gain()<

8:

下列程序的运行结果是。

classpoint

{intx,y;

point(inta,intb)

{x=a;

y=b;

callingtheconstructorfunction."

point(point&

p);

friendpointmove(pointq);

~point(){cout<

callingthedestructorfunction.\n"

intget

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1