面向对象程序设计习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象程序设计习题

1.面向对象程序设计中的数据隐藏指的是参考答案为:D

A.输入数据必须输入保密口令B.数据经过加密处理 C. 对象内部数据结构上建有防火墙D.对象内部数据结构的不可访问性[解析]输入数据必须输入保密口令和数据经过加密处理都不是面向对象程序设计的特征;对象内部数据结构上也不可能建有防火墙,所以它们都不是面向对象程序设计中所指的数据隐藏。面向对象程序设计系统中的封装单位是对象,对象之间只能通过接口进行信息交流,外部不能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不可访问性,也使得数据被隐藏在对象中。这就是面向对象程序设计中的数据隐藏所指。

2.下列各项中符合函数重载必须满足的条件的是参考答案为:D

A.必须有不同的参数个数B.对应的参数类型必须不相同 C. A和B必须同时满足D.A和B只要满足一个即可

[解析]我们知道,在同一个作用域中,要实现函数重载必须满足的条件的是:① 有不同的参

数个数;或者② 对应的参数有不相同的数据类型,即①和②中只要有一个满足就可以了。当然两者都满足更好,但这不是必须的。3.下列带缺省值参数的函数说明中,正确的说明是参考答案为:A

A.int Fun(int x,int y=2,int z=3); B.int Fun(int x=1,int y,int z=3);

C. int Fun(int x,int y=2,int z); D.int Fun(int x=1,int y,int z=3);

[解析]在带缺省值参数的函数说明中,正确的说明应该是无缺省值的参数依次排列在参数表的左边,排完无缺省值的参数后,再依次排列带缺省值的参数。从所给出的四个选项来看,只有“int Fun(int x,int y=2,int z=3)”符合这条规定,其它的都不符合。

4.有如下的对类“CSample”的说明,其中()是错误的。

class CSample { 参考答案为:A A.int a=23;

B.CSample();

public:

C.CSample(int val);

D.~ CSample();

}

[解析]在上面对类“CSample”说明中,“CSample()”和“CSample(int val)”是该类重载的构造函数、“~ CSample()”是该类的析构函数,这三个语句都是正确的。错误的语句是“int a=23”,因为它违反了在类的声明(不管是引用性声明,还是定义性声明)中都不能以赋值表达式的形式给它的数据成员进行初始化。

5.已知类A中的一个成员函数的说明如下:void Set(A &a);

则该函数的参数“A &a”的含义是参考答案为:C

A.指向A的指针为a

B.将变量a的地址赋给类A

C.类A对象引用a用作函数的形参

D.变量A与a按位与后作函数参数

[解析]因为A是一个类,所以“A &a”表示a是类A的对象,但因为对象a的前缀了符号“&”,则“&a”表示是类A的对象引用。所以“A &a”的含义是类A对象引用a用作函数

的形参。

6.若类A和类B的定义如下:

class A {

public:

int i,j;

void get();

};

class B:A {

int i,j;

protected:

int k;

public:

void make();

};

void B::make() { k=i*j; }

则其中()是非法的表达式。参考答案为:D

A.void get();

B.int k;

C.void make();

D.k=i*j;

[解析]对于给定的四项中,前三项都是正确

的,只有第四项是错误的。因为,类B是类A 的私有派生类(缺省访问类型),所以A中的公类型的数据成员在类B中成为了私有数据成员,但函数“void B::make()”既然是类B的成员函数,则既可访问类A中的公有数据成员,也能访问类B中的私有数据成员,则表达式“k=i*j;”造成了访问的二义性,即其中的i 和j,到底是取自类A呢?还是取自类B呢?7.下面的主程序中,语句()是错误的。

class A {

int i;

public:

virtual void fun()=0;

A(int a) { i=a; }

};

class B {

int j;

public:

void fun() { cout<<”B::fun()\n”; }

B(int b,int c) :A(b) { j=c; }

};

void main() 参考答案为:A A.{ A a(5);

B.A *pa;

C.B b(7);

D.B *pb;

}

[解析]在类A中,函数“virtual void fun()=0”为纯虚函数,因此,类A为抽象类。作为抽象类,它是不能被用来定义具体对象的,而语句“A a(5);”恰恰是定义抽象类的对象的,所以它是错误的

8.拷贝(复制)构造函数的作用是参考答案为:C

A.进行数据类型的转换

B.用对象调用成员函数

C.用对象初始化对象

D.用一般类型的数据初始化对象

[解析]进行数据类型的转换和用一般类型的数据初始化对象都是一般构造函数的功能。用对象调用成员函数不用构造函数,只要用“对象名.成员函数名”即可。所以拷贝(复制)构造函数的作用,只能是用对象来初始化

相关文档
最新文档