首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
[程序] #include<ioStream.h> template<class T>class Array; template<class T>class ArrayBody{ friend
[程序] #include<ioStream.h> template<class T>class Array; template<class T>class ArrayBody{ friend
admin
2005-03-15
56
问题
[程序]
#include<ioStream.h>
template<class T>class Array;
template<class T>class ArrayBody{
friend (1);
T* tpBody;
int iRows,iCurrentRow;
ArrayBOdy(int iRsz,int iCsz){
tpBody=(2);
iRows=iRsz,iColumns=iCsz;iCurrentRow=-1;
}
public:
T& operator[](int j) {
bool row_error,column_error;
row_error=column_error=false;
try{
if(iCurrentRow<0||iCurrentRow≥iRows)
row_error=;
if(j<0|| j≥iColumns
column_error=;
if(row_error==true || column_error==true)
(3);
}
eatch(char) {
if(row error==true)
cerr<<“行下标越界[“<<iCurrentRow<<”]”;
if(column error==true)
cerr<<“列下标越界[“<<j<<”]”;
cout<<“\n”;
}
return tpBody[iCurrentRow * iColumns+j];
}
~ArrayBody(){delere[]tpBody;}
};
template<class T>class Array {
ArrayBody<T> tBody;
public:
ArrayBody<T> & operator[](int i){
(4);
return tBody;
};
void main()
{
Array<int> a1(10,20);
Array<double> a2(3,5);
int b1;
double b2;
b1=a1[-5][10]; / * 有越界提示:行下标越界[-5] * /
b1=a1[10][15]; / * 有越界提示:行下标越界[10] * /
b1=a1[1][4]; / * 没有越界提示 * /
b2=a2[2][6]; / * 有越界提示:列下标越界[6] * /
b2=a2[10][20]; / * 有越界提示:行下标越界[10]列下标越界[20] * /
b2=a2[1][4]; / * 没有越界提示 * /
}
选项
答案
(1)class Array<T> (2)new T[iRsz * iCsz] (3)throw’e’(注意:throw后可以填写任意的字符常数) (4)tBody.iCurrentRow=i (5)tBody(iRsz,iCsz)
解析
程序中使用了类模板和友元。首先简单地介绍这2个概念。
模板可以实现逻辑相同、数据类型不同的程序代码的复制,模板机制可以减轻编程和维护的工作量和难度。模板可以分为函数模板和类模板,类模板的一般定义形式
template<类型形参表>class类名{类声明体}
在所有出现类模板的地方不能直接用类名表示,需要加上<类型形参表)。
友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,说明时在前面加关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但是它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。
本题中,(1)空的前面是友元关键词friend,但程序中没有独立的函数,所以只能是另一个模板类Array,所以(1)空应填class Array<T>。
在类模板ArrayBody的定义中,声明了成员变量“T tpBody”,且在析构函数中有“delete[]tpBody”,因为在C++中,delete总是和new成对出现,所以(2)空应该使用 new对tpBody进行初始化。通过return tpBody[iCurrentRow * iColumns+j]行,可知该题中采用一维数组来模拟二维数组的创建。在构造函数有2个参数,分别为行数和列数,所以(2)空应填new T[iRsz*iCsz]。
(3)空的前后有try{...}和catch{...}语句序列,这是C++中典型的异常处理搭配语句。
因为(3)空前面已做处理,当有行下标越界时,置row_error=True;当有列下标越界时,置col_error=True。(3)空前面的判断是“row_error==True||column_error== True”,即只要有行下标越界或是列下标越界就执行(3)空。错误处理语句早已写好,放在catch中。catch是当正常程序段发生异常时才执行的,并且这里指明了是catch (char),所以只要在(3)空处抛出一个char异常,即可进行错误处理。所以(3)空应填 throw’e’,(这里可以是任何字符)。
下面再填Array类中的2个空。首先看(5)空,这显然是做一些初始化工作,给其成员变量赋初值,而Array类只有1个成员变量tBody,且tBody是ArrayBody类型的, ArrayBody的构造函数需要传递2个参数,分别代表数组的行和列。因此(5)空应填 tBody(iRsz,iCsz)。
main中实例化Array,而在类Array的构造函数对tBody这个变量进行实例化,这时就以一维数组的形式创建了二维数组。在类Array中门运算符重载函数中返回了一个 ArrayBody类,而在ArrayBody也存在着口运算符重载函数,并且在ArrayBody的重载函数中对行下标和列下标同时进行了检查,且返回了一个T类型,对Array<int>来说就是返回了int,也就是数组的一个元素。通过对类ArrayBody的观察,发现在整个 ArrayBody中并没有任何地方对iCurrentRow进行赋值,而在ArrayBody的[]运算符重载中却利用其对数组行下标进行判断,而数组的行下标只在Array的口运算符重载中出现,那么(4)空就应该是对类ArrayBody的成员变量iCurrentRow进行赋值,所以(4)空应填tBody.iCurrentRow=i。
转载请注明原文地址:https://jikaoti.com/ti/Wli7FFFM
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】某证券交易所为了方便提供证券交易服务,欲开发一个基于Web的证券交易平台。其主要功能包括客户开户,记录查询、存取款、股票交易等。客户信息包括姓名、.Email(必填且唯一)、
阅读下列说明,回答问题,将解答填入答题纸的对应栏内。【说明】某公司欲开发一套基于Web的房屋中介系统,以有效管理房源和客户,提升成交效率。该系统的主要功能是:(1)房源管理。员工或客户对客户拟出售/出租的意向房进行登记和管理。(2)客户管理。员工对
阅读下列C程序,回答问题,将解答填入答题纸的对应栏内。【C程序】staticvoidpermute_args(intpanonopt_start,intpanonopt_end,intopt_end,intncycle){
v模型指出,(47)对程序设计进行验证,(48)对系统设计进行验证,(49)应当追溯到用户需求说明。
在系统转换的过程中,旧系统和新系统并行工作一段时间,再由新系统代替旧系统的策略称为(20);在新系统全部正式运行前,一部分一部分地代替旧系统的策略称为(21)。
在软件生命周期的不同阶段,需要实施不同类型的测试工作,单元测试是对程序设计进行验证,其中(39)不是单元测试的主要内容。在进行单元测试过程中,通常测试工程师都需要借助(40)来代替所测模块调用的子模块;在单元测试的基础上,需要将所有模块按照概要设计和详细设
多条件覆盖是一种逻辑覆盖,它的含义是设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次,满足多条件覆盖级别的测试用例也是满足(44)级别的;针对布尔表达式A&&(B‖C)执行逻辑覆盖测试,测试用例至少需要(45)种组合才能满足多条件覆盖的要
多条件覆盖是一种逻辑覆盖,它的含义是设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次,满足多条件覆盖级别的测试用例也是满足(44)级别的;针对布尔表达式A&&(B‖C)执行逻辑覆盖测试,测试用例至少需要(45)种组合才能满足多条件覆盖的要
调用函数时若是引用调用方式,则是将________________。下面所定义的函数f1为值调用方式,函数f2为引用调用方式。若有表达式x=f1(5),则函数调用执行完成后,该表达式中x获得的值为________________。
随机试题
应用胰岛素治疗糖尿病最常发生的不良反应是()。
期货公司董事长、总经理、首席风险官在失踪、死亡、丧失行为能力等特殊情形下不能履行职责的,期货公司可以按照公司章程等规定临时决定由符合相应任职资格条件的人员代为履行职责,代为履行职责的时间不得超过()个月。[2014年9月真题]
下列车船税说法正确的有()。
某线路首端电压10.5kV,末端电压10.2kV,首端电压偏移百分数为()。
(1)看到世间人类的苦难(2)宣传佛教(3)创立了佛教(4)广收门徒(5)出家虔心修道
长时间保持同一个姿势,容易导致下肢血液回流不畅,形成血栓。静脉血栓是血栓把血管堵塞,造成血液无法流通,从而引起肢体肿胀、疼痛,以及浅静脉扩张、曲张等临床表现。静脉血回流到心脏后,会进入肺部来完成氧气的交换。深静脉血栓在血管的一端与血管壁仅有轻度粘连,血栓另
恋爱,作为一种复杂的亲密关系,既是对自我和他人的一次再认识,也是对人性深处的一次探究,这个过程并不是_______的,容易出现各种各样的困难和问题,如在恋爱中_______自己、自我怀疑甚至伤害行为。依次填入画横线处最恰当的一项是()。
以下关于网络工程需求分析的叙述中,错误的是()。
TheBibleitselfcontainsatotalof66booksandisdividedintotwoparts,theOldTestamentandtheNewTestament.TheOld
A、Beingoutdoors.B、Thebadweather.C、Thedangerofdrivingatnight.D、Dealingwithdifferentpeople.C对话中男士问女士工作中有没有unpleasan
最新回复
(
0
)