面向对象程序设计复习题Word下载.docx

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

面向对象程序设计复习题Word下载.docx

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

面向对象程序设计复习题Word下载.docx

A)从虚基类继承的函数都是虚函数B)虚函数不得是静态成员函数

C)只能经过指针或引用调用虚函数D)抽象类中的成员函数都是虚函数

11运算符重载是对已有的运算符赋予多重含义,因此

A)能够对基本类型(如int类型)的数据,重新定义”+”运算符的含义

B)能够改变一个已有运算符的优先级和操作数个数

C)只能重载C++中已经有的运算符,不能定义新运算符

D)C++中已经有的所有运算符都能够重载

12模板对类型的参数化提供了很好的支持,因此

A)类模板的主要作用是生成抽象类

B)类模板实例化时,编译器将根据给出的模板实参生成一个类

C)在类模板中的数据成员都具有同样类型

D)类模板中的成员函数都没有返回值

13下列符号中能够用作C++标识符的是

A)_radiusB)foo~barC)elseD)3room

14下列语句中,错误的是

A)constintbuffer=256;

B)constinttemp;

C)constdouble*point;

D)constdouble*rt=newdouble(5.5);

15有如下程序:

intx=3;

do{

x-=2;

cout<

<

x;

}while(!

(--x));

执行这个程序的输出结果是

A)1B)30C)l-2D)死循环

16有如下程序:

#include<

iostream>

usingnamespacestd;

intmain()

{

int*p;

*p=9;

"

Thevalueatp:

*p;

return0;

}

编译运行程序将出现的情况是

A)够编译时出现语法错误,不能生成可执行文件

B)运行时一定输出:

Thevalueatp:

9

C)运行时一定输出:

*9

D)运行时有可能出错

17有如下程序:

voidfunction(doubleval);

doubleval;

function(val);

val;

voidfunction(doubleval)

val=3;

编译运行这个程序将出现的情况是

A)编译出错,无法运行B)输出:

3

C)输出:

3.0D)输出一个不确定的数

18有如下类定义:

classAA

inta;

public:

intgetRef()const{return&

a;

}//①

intgetValue()const{returna;

}//②

voidset(intn)const{a=n;

}//③

friendvoidshow(AAaa)const{cout<

aa;

}//④

};

其中的四个函数定义中正确的是

A)①B)②C)③D)④

19有如下程序:

classBase

voidfun(){cout<

Base:

:

fun"

endl;

classDerived:

publicBase

voidfun()

Derived:

Derivedd;

________________;

d.fun();

已知其执行后的输出结果为:

fun

则程序中下划线处应填入的语句是

A)Base.fun();

B)Base:

fun()C)Base->

fun()D)fun();

20下面是重载为非成员函数的运算符函数原型,其中错误的是

A)Fractionoperator+(Fraction,Fraction);

B)Fractionoperator-(Fraction);

C)Fraction&

operator=(Fraction&

Fraction);

D)Fraction&

operator+=(Fraction&

21有如下类定义:

classFoo

Foo(intv):

value(v){}//①

~Foo(){}//②

private:

Foo(){}//③

intvalue=0;

//④

其中存在语法错误的行是

A)①B)②C)③D)④

22有如下类定义:

classPoint

intx_,y_;

Point():

x_(0),y_(0){}

Point(intx,inty=0):

x_(x),y_(y){}

若执行语句Pointa

(2),b[3],*c[4];

则Point类的构造函数被调用的次数是

A)2次B)3次C)4次D)5次

23有如下程序:

classA

A(){cout<

A"

;

~A(){cout<

~A"

classB:

publicA

{

A*p;

B(){cout<

B"

p=newA();

~B(){cout<

~B"

deletep;

Bobj;

A)BAA~A~B~AB)ABA~B~A~A

C)BAA~B~A~AD)ABA~A~B~A

24有如下程序:

voidfunl()const{cout<

funl"

protected:

voidfun2()const{cout<

fun2"

voidfun3()const{cout<

fun3"

protectedBase

voidfun4()const{cout<

fun4"

Derivedobj;

obj.funl();

//①

obj.fun2();

//②

obj.fun3();

//③

obj.fun4();

其中有语法错误的语句是

A)①②③④B)①②③C)②③④D)①④

25有如下程序:

voidfunl(){cout<

Base"

virtualvoidfun2(){cout<

Base"

}

Derived"

voidfun2(){cout<

voidf(Base&

b){b.funl();

b.fun2();

}

f(obj);

A)BaseB)BaseC)DerivedD)Derived

BaseDerivedBaseDerived

26有如下类声明:

classSAMPLE

intn;

SAMPLE(inti=0):

n(i){}

voidsetValue(intn0);

下列关于setValue成员函数的实现中,正确的是

A)SAMPLE:

setValue(intn0){n=n0;

B)voidSAMPLE:

C)voidsetValue(intn0){n=n0;

D)setValue(intn0){n=n0;

27.下列函数模板的定义中,合法的是()。

A.template<

typenameT>

Tabs(Tx){returnx<

0?

-x:

B.templateclass<

T>

C.templateT<

abs(Tx){returnx<

D.templateTabs(Tx){returnx<

28.下列程序的运行结果为()。

#include<

iostream>

classBASE

{public:

BASE(inti){cout<

调用基类BASE的构造函数:

"

i<

classA:

publicBASE

{public:

A(inta,intb):

BASE(a),b1(b)

{cout<

调用派生类A的构造函数:

a+b<

private:

BASEb1;

};

voidmain()

Aobj(1,2);

A.调用基类BASE的构造函数:

2B)调用基类BASE的构造函数:

1

1调用基类BASE的构造函数:

2

3调用派生类A的构造函数:

C)调用基类BASE的构造函数:

2D)调用基类BASE的构造函数:

3调用基类BASE的构造函数:

29.下列程序的运行结果为()。

#include<

iostream.h>

classT

T(intx){a=x;

b+=x;

staticvoiddisplay(Tc)

{cout<

”a=”<

c.a<

’\t’<

”b=”<

c.b<

inta;

staticintb;

intT:

b=5;

voidmain()

{TA(3),B(5);

T:

display(A);

display(B);

A)a=3b=8B)a=3b=5

a=5b=10a=5b=5

C.a=3b=13D)a=3b=8

a=5b=13a=5b=13

30.下面程序中对一维坐标点类Point进行运算符重载

  #include<

  usingnamespacestd;

classpoint

  public:

  point(intvaI){x=val;

  point&operator++(){x++;

retum*this;

  pointoperator++(int){pointold=*this,++(*this);

retumold;

  intGetX()const{retumx;

  private:

  intx;

  };

  intmain()

  {

  pointa(10);

  cout<

(++a).GetX();

a++.GetX();

  retum();

  }

  编译和运行情况是

  A)运行时输出1011  B)运行时输出1111

  C)运行时输出1112  D)编译有错

二、填空题。

1程序中有如下语句

for(inti=0;

i<

5;

i++)cout<

*(p+i)<

"

能够依次输出int型一维数组DATA的前5个元素。

由此可知,变量p的定义及初始化语句是______________。

2若下面程序运行时输出结果为

1,A,10.1

2,B,3.5

请将程序补充完整。

#include

voidtest(int,char,double_____________);

test(1,'

A'

10.1);

test(2,'

B'

);

voidtest(inta,charb,doublec)

a<

b<

c<

3有如下类声明:

classMyClass

inti;

intj;

intk;

intm,n;

其中,私有成员的数量为_____________。

4有如下程序:

classONE

virtualvoidf(){cout<

l"

classTWO:

publicONE

TWO(){cout<

2"

classTHREE:

publicTWO

virtualvoidf(){TWO:

f();

cout<

3"

ONEaa,*p;

TWObb;

THREEcc;

p=&

cc;

p->

执行上面程序的输出是_____________。

5有如下程序:

classPARENT

PARENT(){cout<

PARENT"

classSON:

publicPARENT

SON(){cout<

SON"

SONson;

PARENT*p;

son;

执行上面程序的输出是_____________。

6若以非成员函数形式,为类Bounce重载”!

”运算符,其操作结果为一bool型数据,则该运算符重载函数的原型是_____________。

7下面是复数类complex的定义,其中重载的运算符”+”的功能是返回一个新的复数对象,其实部等于两个操作对象实部之和,其虚部等于两个操作对象虚部之和;

请补充完整:

classcomplex

doublereal;

//实部

doubleimag;

//虚部

complex(doubler,doublei):

real(r),imag(i){}

complexoperator+(complexa)

{returncomplex(_____________);

8已知一个函数模板定义为

templateT1,typenameT2>

T1FUN(T2n){returnn*5.0;

若要求以int型数据7为函数实参调用该模板函数,并返回一个double型数据,则该调用应表示为_____________。

9.设有数组和指针变量定义为:

inta[2][3]={{1,2},{3,4,5}},*p=&

a[0][2];

则表示式*(p+1)的值为:

10.有字符数组和字符指针定义:

chars1[]=”string”,chars2[]=”char”;

char*constps=s1;

则使用指针ps进行操作时,能够改变ps,但不能改变ps。

11.设Cat是已定义的类,整型变量a是Cat类的公有成员变量,p是Cat类的对象指针,且已指向Cat类的对象c,则用指针p给整型成员变量a赋值5的语句为:

12.在C++语言中,运算符能够重载,运算符重载实质上就是函数的重载,运算符重载实现的多态性属于:

13.在C++语言中,运算符能够重载,运算符重载实质上就是函数的重载,设后置运算符”++”在类A的定义中被重载为成员函数,则对A类对象a作运算a++,与该运算表示式等价的函数调用形式为:

14.当保护继承时,基类的成员在派生类中成为保护成员,不能经过派生类的对象来直接访问该成员。

15.在类中,____________成员为类的所有对象所共享。

16.如果使用数组名作为函数参数,形实结合时,传递的是__________。

17.有如下定义:

classMA

  intvalue;

 public:

   MA(intn=0):

valut(n){}

  MA*ta,tb;

  其中MA类的对象名标识符是_____________。

18.若将一个二元运算符重载为类的成员函数,其形参个数应该是________个。

19.有如下程序:

  classDA{

  intk;

  DA(intx=1):

k(x){}

  ~DA(){cout<

k;

  intmain(){

  DAd[]={DA(3),DA(3),DA(3)};

  DA*p=newDA[2];

  delete[]p;

  return0;

这个程序的输出结果是____________。

20.C++语言中的多态性分为编译时的多态性和__________时的多态性。

三、简答题。

1.什么叫做友元函数,什么叫做友元类?

2.什么叫做多态性,面向对象的多态性能够分为哪四类?

3.什么叫做作用域?

C++中有哪几种类型的作用域?

4.对比简述C语言中函数内静态局部变量与C++中类的静态成员变量的特点。

5.简述用虚函数实现动态多态性的三个关键之处。

6.什么是内联函数,它有哪些特点?

7.列出拷贝构造函数被调用的三种情况。

8.比较类的三种继承方式public、protected、private之间的差别。

9.什么是虚基类?

有何作用?

10.什么是编译时的多态?

具体包括哪些类型?

11.函数模板与函数重载有哪些区别?

12.构造函数与析构函数有什么作用?

四、综合编程题。

1.函数编程:

定义一函数模板swap,它能实现x、y值的交换,在main函数中用任意两个整数、两个浮点数分别使用这个函数模板。

2.函数编程:

定义一函数voidContraryStr(char*str),它能实现字符串的逆序输出,在main函数中用任意字符串测试该函数。

3.类编程:

定义一个表示工人的类Worker,有两个普通数据成员工龄age和工资pay,有一个静态成员人数sum;

定义一个有二个参数的构造函数,给age和pay赋值,令sum++;

给sum初始化为0,定义一个静态成员函数getsum,用于获得sum的值;

在main函数中以不同的方式定义二个工人对象,分别用二个对象和类名3种方式调用getsum函数并输出相应人数。

4.派生类和虚函数编程:

(1)定义一个抽象类Shape,而且提供二个纯虚函数:

计算并返回面积函数reArea及计算并返回体积函数reVolume。

(2)由Shape类派生Cube(正方体)类,它包括私有数据成员length(边长),还包含构造函数和两个纯虚函数的实现。

(3)由Shape类派生Ball(球形)类,它包括私有数据成员radius(半径

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

当前位置:首页 > 工程科技 > 能源化工

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

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