面向对象程序设计C++期末考试试题.docx

上传人:b****1 文档编号:20289234 上传时间:2023-04-25 格式:DOCX 页数:20 大小:20.56KB
下载 相关 举报
面向对象程序设计C++期末考试试题.docx_第1页
第1页 / 共20页
面向对象程序设计C++期末考试试题.docx_第2页
第2页 / 共20页
面向对象程序设计C++期末考试试题.docx_第3页
第3页 / 共20页
面向对象程序设计C++期末考试试题.docx_第4页
第4页 / 共20页
面向对象程序设计C++期末考试试题.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

面向对象程序设计C++期末考试试题.docx

《面向对象程序设计C++期末考试试题.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计C++期末考试试题.docx(20页珍藏版)》请在冰豆网上搜索。

面向对象程序设计C++期末考试试题.docx

面向对象程序设计C++期末考试试题

山东师范大学2009-2010学年第一学期期末考试试题

一、单项选择题

下面每题的选项中,只有一个是正确的,请选择正确的答案填入答题纸中对应的题号后(本题共25小题,每小题1分,共25分)。

1、当一个函数无返回值时,函数的类型应定义为()。

AvoidB任意CintD无

2、作用域运算符的功能是()。

A标识作用域的级别B指出作用域的范围

C给定作用域的大小D标识某个成员是属于哪个类

3、下列的()是引用调用。

A形参是指针,实参是地址值B形参和实参都是变量

C形参是数组名,实参是数组名D形参是引用,实参是变量

4、()不是构造函数的特征

A构造函数的名和类名相同B构造函数可以重载。

C构造函数可以设置默认值D构造函数必须指定类型说明。

5、下列()不能作为类的成员。

A自身类对象的指针B自身类对象的引用

C自身类对象D另一个类的对象

6、重载函数在调用时选择的依据,()是错误的。

A.参数个数B参数的类型

CA或者BD函数的类型

7、下列静态成员的特性中,()是错误的。

A说明静态成员时,要加修饰符static

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

C引用静态数据成员时,要在静态数据成员名前加<类名>及作用域运算符

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

8、已知f1(int)是类A的公有成员函数,p是指向成员函数f1()的指针,采用()是正确的。

Ap=f1Bp=A:

:

f1Cp=A:

:

f1()Dp=f1()

9、运算符->*的功能是()。

A用来表示指向对象指针对指向类成员指针的操作

B用来表示对象对指向类成员指针的操作

C用来表示指向对象指针对类成员的操作

D用来表示对象类成员的操作

10、下列定义中,()是定义指向数组的指针p.

Aintp[5]Bint(*p)[5]C(int*)p[5]Dint*p[]

11、设p为一个指向类A数据成员m的指针,A1为A的一个对象。

如果给m赋值5,()为正确的。

AA1.p=5BA1->p=5CA1.*p=5D*A1.p=5

12、已知print()函数是一个类的常成员函数,它无返回值。

下列表示中,()是正确的。

Avoidprint()constBconstvoidprint()

Cvoidconstprint()Dvoidprint(const)

13、说明constchar*ptr;中,ptr应该是()。

A指向字符常量的指针B指向字符的常量指针

C指向字符串常量的指针D指向字符串的常量指针

14、派生类的对象对它的基类成员中()是可以访问的。

A公有继承的公有成员B公有继承的私有成员

C公有继承的保护成员D私有继承的公有成员

15、下列对派生类的描述中,()是错的。

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

B派生类至少有一个基类

C派生类的成员除了它自己的成员以外,还包含了它的基类成员

D派生类中继承的基类成员的访问权限到派生类保持不变

16、对于int*pa[5];的描述,()是正确的。

Apa是一个指向数组的指针,所指向的数组是5个int型元素。

Bpa是一个指向某数组中第5个元素的指针,该元素是int型变量。

Cpa[5]表示某个数组的第5个元素的值。

Dpa是一个具有5个元素的指针数组,每个元素是一个int型指针。

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

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

18、带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚函数的子对象初始化()。

A与虚基类下的派生类个数有关B多次C二次D一次

19、下列函数中,()不能重载。

A成员函数B非成员函数C析构函数D构造函数

20、关于动态联编的描述中,()是错误的。

A动态联编是以虚函数为基础的

B动态联编是在运行时,确定所调用的函数代码的。

C动态联编调用函数操作是指向对象的指针或对象引用。

D动态联编是在编译时确定操作函数的。

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

A虚函数是一个非satatic类的成员函数。

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

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

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

22、关于纯虚函数和抽象类的描述中,()是错误的。

A纯虚函数是一种特殊的虚函数,它没有具体的实现。

B抽象类是指含有纯虚函数的类。

C一个基类中说明了纯虚函数,则其派生类不再是抽象类。

D抽象类一般只能作为基类来使用。

23、下列关于抽象类的使用中,()是错误的。

A可以定义抽象类的对象B可以定义抽象类的指针

C可以定义抽象类的引用D可以定义抽象类的派生类

24、派生类的构造函数的成员初始化列表中,不能包含()。

A基类的构造函数

B派生类中子对象的初始化

C基类的子对象的初始化

D派生类中一般数据成员的初始化

25、关于new运算符的下列描述中,()是错的。

A它可以用来动态创建对象和对象数组;

B使用它创建的对象或对象数组可以使用delete运算符删除;

C使用它创建对象时要调用构造函数;

D使用它创建对象数组时,必须指定初始值。

二、填空题

将正确的答案填入答题纸相应的题号后。

(本题共3小题,5个空,每空2分,共10分)

1.面向对象的程序设计有三大特征,它们是封装、

(1)、

(2)。

2、类是用户定义的类型,具有类类型的变量称作(3)。

3、在面向对象的程序设计中,通过(4)实现数据隐藏;通过(5)实现代码的复用。

三、分析程序的执行结果题

分析程序的执行结果,将结果按程序运行时输出形式填在答题纸对应的题号后(本题共5小题,每题4分,共20分)。

1、#include

classM{public:

M(){x=y=0;}

M(inti,intj)

{x=i;y=j;}

voidcopy(M*m);

voidsetxy(inti,intj)

{x=i;y=j;}

voidprint(){cout<

private:

intx,y;};

voidM:

:

copy(M*m)

{x=m->x;y=m->y;}

voidfun(Mm1,M*m2)

{m1.setxy(12,15);

m2->setxy(22,25);

}

voidmain()

{Mp(5,7),q;

q.copy(&p);

fun(p,&q);

p.print();

q.print();

}

2、#include

classM

{public:

M(){a=b=0;}

M(inti,intj){a=i;b=j;}

voidprint(){cout<

private:

inta,b;

};

voidmain()

{Mm[2][4];intx=10,y=10;

for(inti=0;i<2;i++)

{for(intj=0;j<4;j++)

{m[i][j]=M(x+=2,y+=10);}

}

M(*pm)[4](m);

for(i=0;i<2;i++)

{cout<

for(intj=0;j<4;j++)

(*(*(pm+i)+j)).print();//用指针的方式存取数组的第ij个元素

}cout<

}

3、#include

#include

classB

{public:

B(char*s,doublen)

{strcpy(name,s);

b=n;

cout<<"Constructor.\n";

}

B(){cout<<"Default\n";}

~B(){cout<<"Destructor"<

voidgetb(char*s,double&n)

{strcpy(s,name);n=b;}

private:

charname[80];

doubleb;

};

voidmain()

{B*p;

doublen;

chars[80];

p=newB[3];

p[0]=B("Ma",4.8);

p[1]=B("Wang",3.6);

p[2]=B("Li",3.1);

for(inti=0;i<3;i++)

{p[i].getb(s,n);

cout<

}

delete[]p;

}

4、#include

classA

{

public:

A(inti,intj){a=i;b=j;}

voidMove(intx,inty){a+=x;b+=y;}

voidShow(){cout<<"("<

private:

inta,b;

};

classB:

publicA

{

public:

B(inti,intj,intk,intl):

A(i,j),x(k),y(l)

{}

voidShow(){cout<

voidfun(){Move(3,5);}

voidf1(){A:

:

Show();}

private:

intx,y;

};

voidmain()

{

Ae(1,2);

e.Show();

Bd(3,4,5,6);

d.A:

:

Show();

d.B:

:

Show();

d.f1();

}

5、#include

classA

{public:

A(inti){a=i;cout<<"con.A\n";}

voidprint(){cout<

~A(){cout<<"des.A\n";}

private:

inta;

};

classB1:

virtualpublicA

{public:

B1(inti,intj):

A(i){b1=j;cout<<"con.B1\n";}

voidprint(){A:

:

print();cout<

~B1(){cout<<"des.B1\n";}

private:

intb1;

};

classB2:

virtualpublicA

{public:

B2(inti,intj):

A(i){b2=j;cout<<"con.B2\n";}

voidprint(){A:

:

print();cout<

~B2(){cout<<"des.B2\n";}

private:

intb2;

};

classC:

publicB1,publicB2

{public:

C(inti,intj,intk,intl):

B1(i,j),B2(i,k),A(i)

{c=l;cout<<"con.C"<

voidprint()

{B1:

:

print();B2:

:

print();cout<

~C(){cout<<"des.C"<

private:

intc;

};

voidmain()

{

Cc1(5,7,3,6);

c1.print();

}

四、程序设计题

将编写的程序标上小题题号,写在答题纸上。

本题共4小题,45分。

1.编写一个程序,设计一个产品类Product,其定义如下:

ClassProduct

{

char*name;//产品名称

intprice;//产品单价

intquantity;//剩余产品数量

public:

Product(char*n,intp,intq);//构造函数

~Product();//析构函数

voidbuy(intmoney);//购买产品

voidget()const;//显示剩余产品数量

};

并用数据进行测试。

(10分)

2.以面向对象的方法设计一个类,此类包含3个私有数据:

unlead,lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油的价格是17元/公升,有铅汽油的价格是16元/公升),请以构造函数方式建立此值。

试输入某天所加的汽油量,本程序将列出加油站当天的总收入。

(10分)

3.编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数。

(12分)

4.编一个程序计算正方体,球体和圆柱体的表面积和体积。

要求:

抽象出一个公共基类container为抽象类,在其中定义求表面积和体积的纯虚函数。

抽象类中定义一个公共的数据成员radius,此数值可以作为球体的半径、正方体的边长、圆柱体底面圆半径。

由该抽象类派生出的三个类,都有求表面积和体积的实际定义。

键盘输入radius的值后,可以输出这3种立方体的面积。

(13分)

8

山东师范大学信息科学与工程2009-2010学年第一学期

一、选择题(25小题,共25分)

1A6D11C16D21C

2D7D12A17B22C

3D8B13C18D23A

4D9A14A19C24C

5C10B15D20D25D

二、填空题(每空2分,共10分)

1继承

2多态

3对象

4封装

5继承

三、分析程序的执行结果,填空(5小题,每小题4分,共20分)

1.5,7

22,25

2.12,2014,3016,4018,50

20,6022,7024,8026,90

3.Default

Default

Default

Constructor.

DestructorMa

Constructor.

DestructorWang

Constructor.

DestructorLi

Ma,4.8

Wang,3.6

Li,3.1

DestructorLi

DestructorWang

DestructorMa

5.con.A

con.B1

con.B2

con.C

5

7

5

3

6

des.C

des.B2

des.B1

des.A

四.程序设计题(4小题,共45分)

1.编写一个程序,设计一个产品类Product,其定义如下:

classProduct

{

char*name;//产品名称

intprice;//产品单价

intquantity;//剩余产品数量

public:

Product(char*n,intp,intq);//构造函数

~Product();//析构函数

voidbuy(intmoney);//购买产品

voidget()const;//显示剩余产品数量

};

并用数据进行测试。

(10分)

#include

#include

classProduct

{

char*name;

intprice;

intquantity;

public:

Product(char*n,intp,intq)

{

name=newchar[strlen(n)+1];

strcpy(name,n);

price=p;

quantity=q;

}

~Product()

{

if(name)

{

delete[]name;

name=0;

}

}

voidbuy(intmoney)

{

intn,r;

n=money/price;

if(n>quantity)

cout<<"数量不够"<

else

{

quantity-=n;

r=money%price;

cout<<"产品:

"<

"<

cout<

}

}

voidget()const

{

cout<<"产品:

"<

"<

}

};

voidmain()

{

Productp1("电视机",2000,15);

p1.buy(7000);

p1.get();

p1.buy(4500);

p1.get();

}

2.以面向对象的方法设计一个类,此类包含3个私有数据:

unlead,lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油的价格是17元/公升,有铅汽油的价格是16元/公升),请以构造函数方式建立此值。

试输入某天所加的汽油量,本程序将列出加油站当天的总收入。

(10分)

#include

classTc

{

private:

doubleunlead,lead,total;

intunprice,price;

public:

Tc(){unprice=17;price=16;}

voidgetdata()

{

cout<<"无铅汽油总量;";

cin>>unlead;

cout<<"有铅汽油总量;";

cin>>lead;

total=unprice*unlead+price*lead;

}

voiddisp()

{

cout<<"总收入:

"<

}

};

voidmain()

{

TcA;

A.getdata();

A.disp();

}

3.编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数。

(12分)

#include

#include

classrectangle

{

private:

floatledge,sedge;

public:

rectangle(){};

rectangle(floata,floatb)

{

ledge=a;

sedge=b;

};

floatarea()

{

returnledge*sedge;

};

voidaddarea(rectangler1,rectangler2)

{

cout<<"总面积:

"<

}

};

voidmain()

{

rectangleA(3.5,2.5),B(4.2,3.8),C;

C.addarea(A,B);

}

4.编一个程序计算正方体,球体和圆柱体的表面积和体积。

要求:

抽象出一个公共基类container为抽象类,在其中定义求表面积和体积的纯虚函数。

抽象类中定义一个公共的数据成员radius,此数值可以作为球体的半径、正方体的边长、圆柱体底面圆半径。

由该抽象类派生出的三个类,都有求表面积和体积的实际定义。

键盘输入radius的值后,可以输出这3种立方体的面积。

(13分)

#include

classCircle

{

public:

Circle(doublei){r=i;}

doubleArea(doubler){a=r*r*3.14159;returna;}

voidShow(){cout<<"area="<

private:

doubler,a;

};

classRectangle

{

public:

Rectangle(doublei,doublej)

{l=i;w=j;}

doubleArea(doublei,doublej){a=i*j;returna;}

voidShow(){cout<<"area="<

private:

doublel,w,a;

};

classGraph:

publicCircle,publicRectangle

{public:

Graph(doublei,doublej,doublek):

Circle(i),Rectangle(j,k)

{r=i;l=j;w=k;}

doubleArea(doubler,doublel,doubleh){a=Circle:

:

Area(r)+Rectangle:

:

Area(l,h);returna;}

voidShow(){cout<<"area="<

private:

doubler,l,w,a;

};

voidmain()

{

Circlec(10);

c.Show();

Rectanglerec(20,50);

rec.Show();

Graphg(10.0,20.0,50.0);

g.Show();

}

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

当前位置:首页 > 人文社科 > 法律资料

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

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