问答题
请使用VC6或使用[答题]菜单打开考生文件夹proj2下的工程prod2,此工程中含有一个源程序文件proj2.cpp,其中定义了Array类。
在C++程序中访问数组元素时,如果索引值(下标)小于0或者大于元素个数减1,就会产生越界访问错误。Array是一个带有检查越界访问功能的数组类,其成员列表如下:
公有成员函数 功能
GetValue 获取指定元素的值
SetValue 将指定元素设置为指定值
GetLength 获取元素个数
私有成员函数 功能
IsOutOfRange 检查索引是否越界
私有数据成员 功能
_p 指向动态分配的整型数组的指针
_size 存放元素个数
Array类的构造函数会动态分配一个int类型数组,以存储给定数量的元素。在公有成员函数GetValue和SetValue中,首先调用私有成员函数IsOutOfRange检查用于访问数组元素的索引是否越界,只有当索引值在有效范围内时,才能进行元素访问操作。
请在横线处填写适当的代码,然后删除横线,以实现Array类的功能。此程序的正确输出结果应为:
1,2,3,4,5,6,7,8,9,10
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
// proj2.cpp
#include <iostream>
using namespace std;
class Array {
public:
Array(int size) //构造函数
{
//******** found********
下列语句动态分配一个int类型数组
_p=______;
_size = size;
}
~Array() { delete []_p; } //析构函数
void SetValue (int index, int value) //设置指定元素的值
{
if (IsOutOfRange(index) ) {
cerr << "Index out of range!" << endl;
return;
}
//******** found********
______;
}
int GetValue(int index) const //获取指定元素的值
{
if (IsOutOfRange(index)) {
cerr << "Index out of range!" << endl;
return -1;
}
//******** found********
______;
}
int GetLength () const { return_size; } //获妈元素个数
private:
int *_p;
int_size;
bool IsOutOfRange(int index) const //检查索引是否越界
{
//******** found********
if (index < 0 ||______)
return true;
else return false;
}
};
int main()
Array a(10);
for (int i = 0; i < a.GetLength(); i++)
a. SetValue(i, i+1);
for (int j = 0; j < a.GetLength() -1 j++)
cout << a. GetValue(j) << ",";
cout << a. GetValue (a. GetLength()-1) << endl;
return 0;
}
【正确答案】(1)new int[size]
(2)_p[index]=value
(3)return_p[index]
(4)index>_size
【答案解析】[考点] 本题考查Array类,其中涉及构造函数、析构函数、成员函数和const函数。
[解析] (1)主要考查考生对动态分配的掌握,题目要求分配一个int类型数组,数组长度为size,应使用new语句分配空间,因此为new int[size]。
(2)主要考查考生对成员函数的掌握,先看函数功能:设置指定元素的值。index为指定的下标,value为指定的值,因此使用语句:_p[index]=value;。
(3)主要考查考生对成员函数的掌握,函数功能为获取指定元素的值,index为要求返回的元素的下标,直接使用return语句返回数组元素即可。
(4)主要考查考生对if语句的掌握,函数功能是检查索引是否越界,当index<0或者index>_size时,index越界,返回true。