returnx;
}
这个函数实现中有以下错误:
(1)_____________________________________________________________________
(2)_____________________________________________________________________
(3)_____________________________________________________________________
正确的函数实现应为:
template
valarrayabs(constvalarray&x)
{
}
问题4:
(本小题3分)从上面的程序中,你可以推断出,valarray模板类中至少重载了哪个或哪些C++的运算符?
答:
重载了________________________________运算符
7
答案:
问题1:
程序的输出结果为:
Sizeofval_array=10
Thevaluesofval_arraybeforecallingabs():
0-1-2-3-4-5-6-7-8-9
Theresultofval_arrayaftercallingabs():
0123456789
问题2.
题号
A
B
C
D
E
对/错
对
错
对
错
对
问题3.答案:
该函数实现有以下错误:
(1)函数的参数x为const参数,不能在函数体中被改变
(2)在函数中应该创建一个临时对象,这个对象的内容由参数x的内容运算而来(3)函数返回的应是临时对象,而不是参数
正确的函数实现为:
template
valarrayabs(constvalarray&x)
{
INTVALARRAYret_array(x);//利用拷贝构造函数构造临时对象for(inti=0;i{
if(ret_array[i]<0)
ret_array[i]*=-1;//取绝对值
}
returnret_array;//返回临时对象
}
或者
template
valarrayabs1(constvalarray&x)
{
INTVALARRAYret_array(x.size());//构造一个与x长度相同的对象for(inti=0;i{
if(x[i]<0)
ret_array[i]=x[i]*(-1);//取绝对值
else
ret_array[i]=x[i];
}
returnret_array;//返回临时对象
}
8
问题4.答案:
重载了取数组下标的运算符’[]’
编程题
2.(本每小题15分)写一个函数,找出给定字符串中具有最大ASCII码的字符。
如字符串“world”中字符‘w’具有最大的ASCII码。
函数的原型为:
charMaxCharacter(char*str);
函数参数:
str指向所要处理的字符串;
函数返回值:
如果str不空,则返回具有最大ASCII码的字符,否则返回空字符0x0或’\0’。
charMaxCharacter(char*str)
{
}
答案:
程序可以有多种写法,下面是其中的四种第一种:
charMaxCharacter(char*str)
{
if(str==NULL)
return0x0;
charmaxChar=0x0;
for(inti=0;str[i]!
=0x0;i++){
if(str[i]>maxChar)
maxChar=str[i];
}
returnmaxChar;
}
第二种:
charMaxCharacter(char*str)
{
if(str==NULL)
return0x0;
charmaxChar=0x0;
for(inti=0;iif(str[i]>maxChar)
maxChar=str[i];
}
returnmaxChar;
}
第三种:
9
charMaxCharacter(char*str)
{
if(str==NULL||str[0]==0x0)
return0x0;
charmaxChar=str[0];
for(inti=1;str[i]!
=0x0;i++)
{
if(str[i]>maxChar)
maxChar=str[i];
}
returnmaxChar;
}
第四种:
charMaxCharacter(char*str)
{
if(str==NULL||str[0]==0x0)
return0x0;
charmaxChar=str[0];
inti=1;
while(str[i]!
=0x0)
{
if(str[i]>maxChar)
maxChar=str[i];
i++;
}
returnmaxChar;
}
作业4:
是非题
1.函数重载既要求两函数参数对应的类型不同又要求参数个数不同。
错
2.在基类中被说明为虚函数的类的成员函数必须在每个派生类中说明为虚函数,才能具有多态的特征。
错
填空题
#include
classAA{
private:
inta;
intb;
public:
AA(intaa,intbb=10)
{
_____A_____;//将aa的值赋给a
10
_____B_____;//将bb的值赋给b
}
______C________;
______D________;
};
intAA:
:
f1(){
returna+b;
}
intAA:
:
f2(){
returna*b;
}
voidmain()
{
AAx(2,3),y(8);
cout<}
答案:
Aa=aa;
Bb=bb;
Cintf1();
Dintf2();
阅读理解题
三、下面的文件queue.h是一个队列类模板Queue的完整实现。
在这个文件中首先定义了一个队列元素类模板QueueItem,然后在这个类的基础上定义了队列类模板Queue。
在Queue中使用链表存放队列的各个元素,front指针指向链表的第一个节点元素,back指针指向链表的最后一个节点元素,成员函数add()将一个新节点元素加入到队列结尾,remove()从队列开头删除一个节点元素。
为方便起见,程序中加上了行号。
阅读程序,根据程序后面的问题作出相应解答。
/*------------------------------------------------------------------------------
------/
/*********************文件queue.h***********************//*------------------------------------------------------------------------------
------/
template
classQueue;
/*****************定义模板类QueueItem************/
template
classQueueItem
{
public:
QueueItem(constType&elem):
item(elem){}
QueueItem(){}
private:
Typeitem;
11
QueueItem*nextItem;
friendclassQueue;
};
/*****************定义模板类Queue************/template
classQueue{
public:
Queue():
front(NULL),____(A)_____{}
~Queue();
Typeremove();
voidadd(constType&);
boolis_empty()const{return____(B)______;}private:
QueueItem*front;
Que