面向对象程序设计形成性考核及解答作业四Word文件下载.docx
《面向对象程序设计形成性考核及解答作业四Word文件下载.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计形成性考核及解答作业四Word文件下载.docx(13页珍藏版)》请在冰点文库上搜索。
”,且程序中包含有语句“a(2,5)=++k*3;
”,则此语句中肯定属于重载操作符的是()。
A.()B.=C.++D.*
13.下面是重载双目运算符+的普通函数原形,其中最符合+原来含义的是()。
A.Valueoperator+(Value,Value);
B.Valueoperator+(Value,int);
C.Value&
operator+(Value,Value);
D.Value&
operator+(Value&
Value&
);
14.关于插入运算符<
<
的重载,下列说法不正确的是()。
1
A.运算符函数的返回值类型是ostream&
。
B.重载的运算符必须定义为类的成员函数。
C.运算符函数的第一个参数的类型是ostream&
D.运算符函数有两个参数。
15.C++的继承性允许派生类继承基类的()。
A.部分特性,并允许增加新的特性或重定义基类的特性
B.部分特性,但不允许增加新的特性或重定义基类的特性
C.所有特性,并允许增加新的特性或重定义基类的特性
D.所有特性,但不允许增加新的特性或重定义基类的特性
二、填空题
1.当一个队列为满时,不能对其做________元素的操作。
2.在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,当链队非空时,_____________指向队首结点的后继(即下一个)结点。
3.在一个用链表实现的队列类中,若链队为空或只含有一个结点,则队首指针的值与队尾指针的值________。
4.一个类的__________函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。
5.定义类动态对象数组时,其元素只能靠自动调用该类的____________来进行初始化。
6.假定AB为一个类,则执行“ABa[10];
”语句时,系统自动调用该类构造函数的次数为________。
7.对类中引用成员的初始化只能通过在构造函数中给出的______________来实现。
8.假定要把aa定义为AB类中的一个引用整数型数据成员,则定义语句为____________。
9.假定用户为类AB定义了一个构造函数“AB(intaa){a=aa;
}”,则系统(会/不会)_________为该类自动定义一个无参构造函数"
AB(){}"
10.假定用户为类AB定义了一个构造函数“AB(intaa=0):
a(aa){}”,则定义该类的对象时,可以有________种不同的定义格式。
11.派生类的成员函数能够直接访问所含基类的__________成员函数和___________成员函数。
12.在定义一个派生类时,使用private关键字表示为私有继承,使用__________关键字表示为公有继承。
三、程序填空:
1.已知一个利用数组实现栈的类定义如下:
constintARRAY_SIZE=10;
classStack{
public:
voidInit(){top=-1;
}//初始化栈为空
voidPush(intnewElem);
//向栈中压入一个元素
intPop();
//从栈顶弹出一个元素
boolEmpty(){//判栈空
if(top==-1)returntrue;
elsereturnfalse;
}
intDepth(){returntop+1;
}//返回栈的深度
2
voidPrint();
//按照后进先出原则依次输出栈中每个元素,直到栈空为止
private:
intelem[ARRAY_SIZE];
//用于保存堆栈元素的数组
inttop;
//指明栈顶元素位置的指针
};
该类的Pop和Print函数的实现分别如下:
___
(1)___{
if(top==-1){
cout<
"
栈空!
endl;
exit
(1);
//中止运行
return___
(2)___;
voidStack:
:
Print(){
while(!
Empty())
___(3)___<
'
'
;
(1)
(2)(3)
2.#include<
iostream.h>
#include<
stdlib.h>
classA{
int*a;
intn;
intMaxLen;
A():
a(0),n(0),MaxLen(0){}
A(int*aa,intnn,intMM){
n=nn;
MaxLen=MM;
if(n>
MaxLen)exit
(1);
___
(1)___;
//由a指向长度为MaxLen的动态数组
for(inti=0;
i<
n;
i++)a[i]=aa[i];
~A(){delete[]a;
intGetValue(inti)___
(2)___//函数体返回a[i]的值
voidmain()
{
intb[10]={1,2,3,4,5,6,7,8,9,10};
Ar(b,10,10);
inti,s=0;
for(i=0;
10;
i++);
___(3)___//把r对象的a数据成员中的每个
3
//元素值依次累加到s中
s="
s<
3.在下面一段类定义中,Derived类公有继承了基类Base。
需要填充的函数由注释内容给出了功能。
classBase
intmem1,mem2;
//基类的数据成员
Base(intm1,intm2){
mem1=m1;
mem2=m2;
voidoutput(){cout<
mem1<
mem2<
//...
classDerived:
publicBase
intmem3;
//派生类本身的数据成员
//构造函数,由m1和m2分别初始化mem1和mem2,由m3初始化mem3
Derived(intm1,intm2,intm3);
//输出mem1,mem2和mem3数据成员的值
voidoutput(){
cout<
mem3<
Derived:
Derived(intm1,intm2,intm3):
___
(2)___{___(3)___;
四、写出程序运行结果:
1.#include<
classFranction{//定义分数类
intnume;
//定义分子
intdeno;
//定义分母
//把*this化简为最简分数,具体定义在另外文件中实现
voidFranSimp();
4
//返回两个分数*this和x之和,具体定义在另外文件中实现
FranctionFranAdd(constFranction&
x);
//置分数的分子和分母分别0和1
voidInitFranction(){nume=0;
deno=1;
//置分数的分子和分母分别n和d
voidInitFranction(intn,intd){nume=n;
deno=d;
//输出一个分数
voidFranOutput(){cout<
nume<
/'
deno<
Franctiona,b,c,d;
a.InitFranction(6,15);
b.InitFranction(3,10);
c.InitFranction();
c=a.FranAdd(b);
d=c.FranAdd(a);
a:
"
a.FranOutput();
b:
b.FranOutput();
c:
c.FranOutput();
d:
d.FranOutput();
inta,b;
A(){a=b=0;
A(intaa,intbb){a=aa;
b=bb;
intSum(){returna+b;
int*Mult(){
int*p=newint(a*b);
returnp;
voidmain(){
int*k;
Ax(2,3),*p;
p=newA(4,5);
x.Sum()<
*(x.Mult())<
p->
Sum()<
*(k=p->
Mult())<
deletek;
五、指出程序或函数的功能
5
1.intCount(IntNode*f)
if(!
f)return0;
intc=0;
while(f){
c++;
f=f->
next;
returnc;
假定IntNode的类型定义为:
structIntNode{
intdata;
//结点值域
IntNode*next;
//结点指针域
2.intf(constchar*s)
inti=0;
while(*s++)i++;
returni;
六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误。
1.下面是分数类fract的定义及测试主程序,在类定义及其友元函数定义中有两处错误,更正错误后程序应显示41/28,请指出错误所在行的行号并给出改正意见。
classfract{
intden;
//分子
intnum;
//分母
fract(intd=0,intn=1):
den(d),num(n){}//1行
friendfract&
operator+=(fract,fract&
//2行
voidshow(){cout<
den<
num;
}//3行
//4行
operator+=(fractf1,fractf2)//5行
{//7行
f1.den=f1.den*f2.num+f1.num*f2.den;
//8行
f1.num*=f2.num;
//9行
returnf1;
//10行
voidmain(){
fractfr(3,4);
fr+=fract(5,7);
fr.show();
6
错误行的行号为______和________。
分别改正为______________________________
和______________________________。
7
《面向对象程序设计》单元复习指导四参考答案
一、选择题:
1.C2.D3.B4.C5.C6.C7.A8.C9.B10.A
11.C12.A13.A14.B15.C
二、填空题:
1.插入2.ElemHead->
next3.相同4.析构
5.无参构造函数6.107.初始化表8.int&
aa;
9.不会10.211.公有保护12.Public
三、程序填充参考解答
1.
(1)intStack:
Pop()
(2)elem[top--](3)Pop()
2.答案:
(1)a=newint[MaxLen]
(b){returna[i];
(c)s+=r.GetValue(i)
3.
(1)Base:
output()
(2)Base(m1,m2)(3)mem3=m3
四、程序运行结果参考解答
1.a:
6/15
3/10
7/10
11/10
2.56
920
1.统计出以表头指针为f的链表中结点的个数。
2.求出并返回字符指针参数s所指向的字符串长度。
1.25
operator+=(fract&
fract);
fract&
operator+=(fract&
f1,fractf2);
七、编程:
1.
Strings:
Strings(char*str){
n=strlen(str);
s=newchar[n+1];
strcpy(s,str);
2.
classA_class{
intx,y,t;
8
A_class(inti,intj):
x(i),y(j){
if(y>
x){t=x;
x=y;
y=t;
//其它函数从略
friendintVariance(A_class&
ac);
//参数名任意
intVariance(A_class&
ac)
returnac.x*ac.x-ac.y*ac.y;
A_classA_obj(3,5);
Result:
Variance(A_obj)<
9