### 东南大学电类C++08_09_3机试参考答案解析
#### 一、改错题解析
本部分考查了学生对于C++基础语法的理解与应用能力,特别是面向对象编程中的类成员函数定义、作用域、内存管理等关键概念。
1. **类Array的定义**:
- `class Array`:定义了一个名为`Array`的类。
- 成员变量:
- `int *p;`:指向整型数组的指针。
- `int last;`:表示数组中最后一个有效元素的索引。
2. **构造函数**:
- `Array::Array(int max)`: 构造函数接受一个参数`max`,用于指定数组的最大容量,默认值为20。
- `last = -1;`:初始化`last`为-1,表示数组初始为空。
- `p = new int[max];`:动态分配内存,创建一个大小为`max`的整型数组。
3. **析构函数**:
- `Array::~Array()`:析构函数,负责释放通过构造函数分配的内存。
- `delete[] p;`:释放数组占用的内存空间。
4. **成员函数**:
- `void Array::insertOrder(int key)`:实现插入排序的功能,确保数组元素保持升序排列。
- 如果数组为空(`last == -1`),则直接插入元素。
- 如果数组不为空,则遍历数组,找到合适的位置插入新元素。
- 更新`last`的值,表示数组中元素的数量增加了1。
- `void Array::print()`:输出数组中的所有元素。
5. **主函数**:
- `Array a;`:创建一个`Array`类型的对象`a`。
- 循环读取10个整数,并调用`insertOrder`方法插入到数组中。
- 调用`print`方法输出排序后的数组。
6. **常见错误**:
- 类成员函数定义时缺少`Array::`前缀。
- 构造函数中的`void`关键字多余。
- `p`指针释放时的括号使用错误。
- 插入排序算法实现时,数组元素引用错误。
#### 二、编程题解析
本部分考查学生对C++高级特性的掌握程度,包括文件输入/输出、运算符重载等。
1. **类Array的定义**:
- `class Array`:定义了一个名为`Array`的类。
- 成员变量:
- `int v[30];`:固定大小的整型数组。
- `int last;`:表示数组中最后一个有效元素的索引。
2. **构造函数**:
- `Array::Array()`:无参构造函数。
- 打开文件`vdata.txt`,读取其中的数据并存入数组。
- 检查文件是否打开成功。
- 使用循环读取文件中的每一个整数,存储到数组中。
3. **析构函数**:
- `Array::~Array()`:析构函数,负责将数组数据写回文件。
- 打开文件`vdata.txt`,将数组中的数据写入文件。
- 关闭文件。
4. **成员函数**:
- `void Array::insertAfter(int t)`:在数组末尾插入一个新的整数`t`。
- 更新`last`的值,表示数组中元素的数量增加了1。
- 将`t`赋值给数组的下一个位置。
5. **友元函数**:
- `ostream& operator<<(ostream& os, Array& a)`:重载`<<`运算符,用于输出数组中的所有元素。
6. **主函数**:
- 创建一个`Array`类型的对象`vector`。
- 输出数组内容。
- 向数组中添加3个整数,并再次输出数组内容。
7. **注意事项**:
- 文件操作时需要注意文件的正确打开与关闭。
- 运算符重载时,返回类型应为`ostream&`。
- 在构造函数中,需要处理文件打开失败的情况。
- 在析构函数中,需要正确地写入数据到文件。
- `insertAfter`函数中,确保数组不会越界。
以上是针对给定的题目内容所进行的详细解析,涵盖了改错题与编程题的所有关键知识点。通过对这些知识点的学习和理解,可以有效地提升对于C++语言的理解与应用能力。