首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下程序说明和C++程序,将程序段中(1)~(5)空缺处的语句填写完整。 [说明] C++语言本身不提供对数组下标越界的判断。为了解决这一问题,在以下[C++程序]中定义了相应的类模板,使得对于任意类型的二维数组,可以在访问数组元素的同时,对
阅读以下程序说明和C++程序,将程序段中(1)~(5)空缺处的语句填写完整。 [说明] C++语言本身不提供对数组下标越界的判断。为了解决这一问题,在以下[C++程序]中定义了相应的类模板,使得对于任意类型的二维数组,可以在访问数组元素的同时,对
admin
2009-02-15
32
问题
阅读以下程序说明和C++程序,将程序段中(1)~(5)空缺处的语句填写完整。
[说明]
C++语言本身不提供对数组下标越界的判断。为了解决这一问题,在以下[C++程序]中定义了相应的类模板,使得对于任意类型的二维数组,可以在访问数组元素的同时,对行下标和列下标进行越界判断,并给出相应的提示信息。
[C++程序]
#include <iostream.h>
template <class T> class Array;
template <Class T> class ArrayBody {
friend (1);
T* tpBody;
int iRows,iColumns, 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 = true;
if (j<0 || j>= iColumns)
column_error = true;
if (row_error == true || column_error == true)
(3);
}
catch(char){
if (row_error == true)
cerr << "行下标越界[" << iCurrentRow << "]";
if (column_error = true)
cerr << "列下标越界[" << j << "]";
cout << "\n";
}
return tpBody[iCurrentRow * iColumns + j];
}
~Arraygody(){delete[]tpBody;}
};
template <class T> class Array {
ArrayBody<T> tBody;
Public;
ArrayBody<T> & operator[] (int i) {
(4);
return tBody;
}
Array(int iRsz, int iCsz) :(5) { }
};
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]; //没有越界提示
}
选项
答案
这是一道要求读者掌握类模板和友元的使用方法的程序设计题。本题的解答思路如下。 模板可以实现逻辑相同、数据类型不同的程序代码的复制,模板机制可以减轻编程和维护的工作量和难度。模板可以分为函数模板和类模板。类模板的一般定义形式为: 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+i];”语句可知,该题中采用的是以一维数组来模拟二维数组的创建。在构造函数有两个参数,分别为行数和列数。因此(2)空缺处所填写的内容是“new T[iRsz*iCsz]”。 (3)空缺处所在的语句前后有try{...}和catch{...}语句序列,这是C++中典型的异常处理搭配语句。因为(3)空缺处所在的语句前面已进行了如下处理,当有行下标越界时,置row_error=true;当有列下标越界时,置column_error=true。(3)空缺处前面的判断是“row_error==true||column_error==tree”,即只要有行下标越界或是列下标越界就执行(3)空缺处的语句。而错误处理语句已放在catch中予以处理。catch是当正常程序段发生异常时才执行的,并且程序中指明了是catch(char),所以只要在(3)空缺处抛出一个catch异常,即可进行错误处理。故(3)空缺处所填写的语句是“throw,’e’”,其中throw之后可以填写任意的字符常数。 对于Array类中的(4)、(5)空缺处所填写的内容。首先看(5)空缺处,该空缺处显然是进行变量赋初值等相关的初始化工作。而Array类只有一个成员变量tBody,且tBody是ArrayBody类型的ArrayBody的构造函数需要传递两个参数,分别代表数组的行和列,因此(5)空缺处应填入“tBody(iRsz,iCsz)”。 通过main函数中对a1和a2的实例化,就可大致了解整个程序。在main函数中实例化Array,而在类 Array的构造函数对tBody这个变量进行实例化。此时就以一维数组的形式创建了二维数组。在类Array中[]运算符重载函数中返回了一个ArrayBody类,而在ArrayBody也存在着[]运算符重载函数,并且在ArrayBody的重载函数中对行下标和列下标同时进行了检查,且返回了一个T类型。对Array<int>来说,就是返回了int,即数组的一个元素。通过对类ArrayBody的观察发现,在整个ArrayBody中并没有任何地方对iCurrentRow进行赋值,而在ArrayBody的[]运算符重载中却利用其对数组行下标进行判断,而数组的行下标只在Array的[]运算符重载中出现,那(4)空缺处就应该是对类ArrayBody 的成员变量iCurrentRow进行赋值,本题的该空缺处所填入的内容是“tBody.iCurrentRow=i”。
解析
转载请注明原文地址:https://kaotiyun.com/show/nEjZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
在Excel中,若在某单元格插入公式“=$A1*A3”,则该公式中对单元格的引用属于()。
结构化程序中的基本结构不包括(28)。
数据展现常需要图表化。美化图表的原则不包括()。
在Word2007文档编辑时,使用(39)________________选项卡中的“分隔符”命令,可以在文档中指定位置强行分页。
在信息收集过程中,需要根据项目的目标把握数据(7)________________要求,既不要纳入过多无关的数据,也不要短缺主要的数据;既不要过于简化,也不要过于烦琐。
某商场统计了每个月的销售总额,坚持了多年。每次公布上月销售额时,还都采用同比和环比概念与历史数据进行对比。以下叙述中,正确的是________________。
在Excel2010中,设单元格A1、B1、C1、A2、B2、C2中的值分别为1、2、3、4、5、6,若在单元格D1中输入函数“=MAX(A1:A2,B1:C2)”,按回车键后,则D1单元格中的值为(
鼠标指针的形状取决于它所在的位置以及与其他屏幕元素的相互关系。在文字处理的文本区域,指针就像(),指向当前待插入字符的位置。
某单位的统计报表比较多,采用表号(报表的编号)的好处是______。
随机试题
某局办公室共有10个文件柜按序号一字排开。其中1个文件柜只放上级文件,2个文件柜只放本局文件,3个文件柜只放各处室材料,4个文件柜只放基层单位材料。已知下列条件:①1号和10号文件柜放各处室材料。②2个放本局文件的文件柜连号。③放
下列哪一项不是蜘蛛痣的特点
咽一结合膜热的病原体为
患儿,女,2岁。1d来出现双下肢水肿,咳粉红色泡沫痰,哭闹时面色青紫伴全身人汗。查体:心界扩大,胸骨左缘3~4肋间可闻及Ⅲ~Ⅳ级粗糙的全收缩期杂音,肺动脉第二音亢进。超声心动图示左心室、左心房和右心室内径增大,主动脉内径缩小。从此患儿的临床表现看可能并
重要钢结构采用的焊接材料应进行抽样复验,本条中“重要”是指()。
根据《水工碾压混凝土施工规范》DL/T5112—2000,碾压混凝土水胶比,应根据设计提出的混凝土强度、拉伸变形、绝热温升和抗冻性等要求确定,其值宜小于()。
实行定期定额缴纳税款的纳税人,可以实行()的纳税方式。
甲欲购买乙的汽车。经协商,甲同意3天后签订正式的买卖合同,并先交1000元给乙,乙出具的收条上写明为“收到甲订金1000元”。3天后,甲了解到乙故意隐瞒了该车证照不齐的情况,故拒绝签订合同。下列哪一个说法是正确的?()
方差分析中,F(2,24)=0.90,则F检验的结果()。
ClassifythefollowingideasasrelatingtoAtheLimitationsTheoryBtheCentralGovernorTheoryCboththeLimitationsTheory
最新回复
(
0
)