面向对象A卷.docx

上传人:b****3 文档编号:10496475 上传时间:2023-05-26 格式:DOCX 页数:13 大小:24.53KB
下载 相关 举报
面向对象A卷.docx_第1页
第1页 / 共13页
面向对象A卷.docx_第2页
第2页 / 共13页
面向对象A卷.docx_第3页
第3页 / 共13页
面向对象A卷.docx_第4页
第4页 / 共13页
面向对象A卷.docx_第5页
第5页 / 共13页
面向对象A卷.docx_第6页
第6页 / 共13页
面向对象A卷.docx_第7页
第7页 / 共13页
面向对象A卷.docx_第8页
第8页 / 共13页
面向对象A卷.docx_第9页
第9页 / 共13页
面向对象A卷.docx_第10页
第10页 / 共13页
面向对象A卷.docx_第11页
第11页 / 共13页
面向对象A卷.docx_第12页
第12页 / 共13页
面向对象A卷.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

面向对象A卷.docx

《面向对象A卷.docx》由会员分享,可在线阅读,更多相关《面向对象A卷.docx(13页珍藏版)》请在冰点文库上搜索。

面向对象A卷.docx

面向对象A卷

《面向对象程序设计C++》期末考试试卷(A)

班级:

姓名:

学号:

分数:

题号

总分

得分

试卷说明:

本套试题共四个大题,全部题目都答在答题纸上,写在其他地方均无效。

(答题纸在本套试卷的第10页上)

一、选择题(每小题2分,共40分)

1、C++是(C)。

A.面向对象的程序设计语言

B.面向过程的程序设计语言

C.既支持面向对象的程序设计又支持面向过程的程序设计的混合型语言

D.非结构化的程序设计语言

2、面向对象程序设计思想的主要特征中不包括(D)。

A.封装性B.多态性C.继承性D.功能分解,逐步求精

3、若定义:

stringstr;当语句cin>>str;执行时,从键盘输入:

MicrosoftVisualStudio6.0!

所得的结果是str=(B)。

A.MicrosoftVisualStudio6.0!

B.Microsoft

C.MicrosoftVisualD.MicrosoftVisualStudio6.0

4、考虑下面的函数原型声明:

voidtestDefaulParam(inta,intb=7,charz='*');

下面函数调用中,不合法的是(D)。

A.testDefaulParam(5);B.testDefaulParam(5,8);

C.testDefaulParam(5,'#');D.testDefaulParam(0,0,'*');

5、下列语句中,将函数intsum(intx,inty)正确重载的是(C)。

A.floatsum(intx,inty);B.intsum(inta,intb);

C.floatsum(floatx,floaty);D.doublesum(inty,intx);

6、下列表示引用的方法中,(A)是正确的。

已知:

inta=1000;

A.int&x=a;B.char&y;C.int&z=1000;D.float&t=&a;

7、在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用(D)。

A.内联函数B.重载函数C.递归调用D.嵌套调用

8、下列有关C++类的说法中,不正确的是(D)。

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

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

C.在类中,如果不做特别说明,所有成员的访问权限均为私有的

D.在类中,如果不做特别说明,所有成员的访问权限均为公用的

9、已知X类,则当程序执行到语句:

Xarray[3];时,调用了(D)次构造函数。

A.0B.1C.2D.3

10、下面说法中,正确的是(B)

A.一个类只能定义一个构造函数,但可以定义多个析构函数

B.一个类只能定义一个析构函数,但可以定义多个构造函数

C.构造函数与析构函数同名,只要名字前加了一个求反符号(~)

D.构造函数可以指定返回类型,而析构函数不能指定任何返回类型,即使是void类型也不可以

11、已知:

print()函数是一个类的常成员函数,它无返回值,下列表示中,(B)是正确的。

A.voidprint()const;B.constvoidprint();

C.voidconstprint();D.voidprint(const);

12、下面描述中,表达错误的是()

A.公用继承时基类中的public成员在派生类中仍是public的

B.公用继承时基类中的private成员在派生类中仍是private的

C.公用继承时基类中的protected成员在派生类中仍是protected的

D.私有继承时基类中的public成员在派生类中是private的

13、设置虚基类的目的是( )。

A.简化程序B.消除二义性C.提高运行效率D.减少目标代码

14、下面()的叙述不符合赋值兼容规则。

A.派生类的对象可以赋值给基类的对象

B.基类的对象可以赋值给派生类的对象

C.派生类的对象可以初始化基类的对象

D.派生类的对象的地址可以赋值给指向基类的指针

15、关于虚函数的描述中,()是正确的。

A.虚函数是一个static类型的成员函数

B.虚函数是一个非成员函数

C.基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数

D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型

16、下面关于友元的描述中,错误的是()。

A.友元函数可以访问该类的私有数据成员

B.一个类的友元类中的成员函数都是这个类的友元函数

C.友元可以提高程序的运行效率

D.类与类之间的友元关系可以继承

17、下列关于静态数据成员的说法,不正确的是()。

A.类中定义的公用静态数据成员,可以通过类的对象来访问

B.类中定义的所有静态数据成员,都必须在类外初始化

C.静态数据成员不是所有对象所共用的

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

18、如果表达式++i*k中的“++”和“*”都是重载的友元运算符,若采用运算符函数调用格式,则表达式还可以表示为()。

A.operator*(i.operator++(),k)B.operator*(operator++(i),k)

C.i.operator++().operator*(k)D.k.operator*(operator++(i))

19、下面对模板的声明,正确的是()。

A.templateB.template

C.templateD.template

20、下列的各类函数中,()不是类的成员函数

A.构造函数B.析构函数C.友元函数D.复制构造函数

二、填空题(前14个空,每空1分,后3个空,每空2分,共20分)

1、类和对象的关系可表述为:

类是对象的,而对象则是类的。

2、静态成员函数没有隐含的,所以,在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。

3、在图1中,A,B,C,D,E,F均是类,其中属于单继承的派生类有,属于多继承的派生类有,类F的基类有,类A的派生类有。

4、如果只想保留公共基类的一个复制,就必须使用关键字把这个公共基类声明为虚基类。

5、从实现的角度来讲,多态性可以划分为两类:

和。

6、如果一个类包含一个或多个纯虚函数,则该类称为。

7、若要把voidfun()定义为类A的友元函数,则应在类A的定义中加入语句。

8、列出C++中的两种代码复用方式:

和。

9、析构函数的作用是。

10、假定A是一个类名,则该类的拷贝构造函数的原型说明语句为:

11、后置自增运算符“++”重载为类的成员函数(设类名为A)的形式为:

三、阅读下面4个程序,写出程序运行时输出的结果。

(共13分)

1、

#include

usingnamespacestd;

voidfun(int&a,int&b)

{intp;

p=a;a=b;b=p;

}

voidexchange(int&a,int&b,int&c)

{if(a

if(a

if(b

}

intmain()

{inta=12,b=89,c=56;

exchange(a,b,c);

cout<<"a="<

return0;

}

2、

#include

usingnamespacestd;

classA{

public:

A(){cout<<"A";}

};

classB{

public:

B(){cout<<"B";}

};

classC:

publicA{

public:

C(){cout<<"C";}

private:

Bb;

};

intmain(){

Cobj;

return0;

}

3、

#include

usingnamespacestd;

classA

{public:

A(){cout<<"A:

:

A()called.\n";}

virtual~A(){cout<<"A:

:

~A()called.\n";}

};

classB:

publicA

{public:

B(inti)

{cout<<"B:

:

B()called.\n";

buf=newchar[i];

}

virtual~B()

{delete[]buf;

cout<<"B:

:

~B()called.\n";

}

private:

char*buf;

};

intmain()

{A*a=newB(15);

deletea;

return0;

}

4、

#include

usingnamespacestd;

classA

{public:

voidf(){cout<<"CallA'sfunctionf()"<

};

classB

{public:

voidf(){cout<<"CallB'sfunctionf()"<

voidg(){cout<<"CallB'sfunctiong()"<

};

classC:

publicA,publicB

{public:

voidg(){cout<<"CallC'sfunctiong()"<

};

intmain()

{Ccc;

cc.B:

:

f();

cc.B:

:

g();

cc.g();

return0;

}

四、编程题(27分)

1、(10分)已知复数类Complex的声明如下:

classComplex

{public:

Complex();//无参构造函数

Complex(double);//转换构造函数

Complex(double,double);//有两个形参的构造函数

friendComplexoperator+(Complex&,Complex&);//对“+”运算符进行重载

friendostream&operator<<(ostream&,Complex&);//对“<<”运算符进行重载

friendistream&operator>>(istream&,Complex&);//对“>>”运算符进行重载

private:

doublereal,imag;

};

要求:

(1)写出该类的所有构造函数的类外定义代码。

(2)写出对运算符“+”、“<<”、“>>”进行重载的运算符重载函数的定义。

2、(17分)下列Shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数。

classShape

{public:

virtualdoublearea()=0;

};

doubletotal(Shape*s[],intn)

{doublesum=0.0;

for(inti=0;iarea();

returnsum;

}

要求:

(1)从Shape类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(radius),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。

(2)写出main()函数,计算半径为5.5的圆和边长为9.9的正方形的面积和(必须通过调用total函数计算)。

 

面向对象C++程序设计A卷答案

1-5.CDBCC 6-10.AADDB11-15.ABBBC 16-20.DCBCC

1.抽象实例2.this指针

3.ED、FA、B、C、D、ED、F

4.virtual5.静态多态性动态多态性

6.抽象类7.friendvoidfun(A&a)8.继承组合或模板

9.在对象被系统释放之前做一些内存清理工作10.A(constA&)

11.Aoperator++(int)

1、a=89,b=56,c=12

2、ABC

3、A:

:

A()called.

B:

:

B()called.

B:

:

~B()called.

A:

:

~A()called.

4、CallB'sfunctionf()

CallB'sfunctiong()

CallC'sfunctiong()

1、(10分)

Complex:

:

Complex(){real=0;imag=0;}

Complex:

:

Complex(doubler){real=r;}

Complex:

:

Complex(doubler,doublei){real=r;imag=i;}

Complexoperator+(Complex&c1,Complex&c2)

{Complexc;

c.real=c1.real+c2.real;c.imag=c1.imag+c2.imag;

returnc;

}

ostream&operator<<(ostream&output,Complex&c)

{output<<"("<

returnoutput;

}

istream&operator>>(istream&input,Complex&c)

{cout<<"inputrealandimaginarypartofcomplexnumber:

";

input>>c.real>>c.imag;

returninput;

}

2、(17分)

classCircle:

publicShape

{public:

Circle(doubler){radius=r;}

voidset()

{cout<<"Pleaseinputthevalueofthecircle:

"<

cin>>radius;

}

voidshow()

{cout<<"theradiusofthecircle="<

doublearea(){return3.14159*radius*radius;}

private:

doubleradius;

};

classSquare:

publicShape

{public:

Square(doublea){this->a=a;}

voidset()

{cout<<"Pleaseinputthevalueofa:

"<

cin>>a;

}

voidshow()

{cout<<"a="<

doublearea(){returna*a;}

private:

doublea;

};

intmain()

{

CircleC(5.5);

C.show();

SquareS(9.9);

S.show();

Shape*s[]={&C,&S};

cout<<"total="<

return0;}

 

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2