定义一个PartFilledArray类,并为这个类实现成员函数addValue(用于向数组中添加一个数)、拷贝构造函数、析构函数的定义,以及重载<<运算符。该类的对象用于表示一个部分填充的数组 。成员变量number_used包含了目前实际填充的数组的位置数。例如,一个大小为8的数组,若实际存储了3个数,则a指向这个数组,max_number的值为8,number_used的值为3。 在主函数中创建一个PartFilledArray类的对象a,依次输入若干个数,以0作为输入结束,如果输入数字的个数小于max_number,则将这些数字输出,输出以空格分割,最后一个数字后也有空格。如果输入数字的个数大于max_number,则提示“Adding to a full array.”
时间: 2023-11-22 11:56:36 浏览: 33
下面是PartFilledArray类的实现:
```cpp
#include <iostream>
using namespace std;
class PartFilledArray {
private:
int *a; // 数组
int max_number; // 最大长度
int number_used; // 实际填充的数组位置数
public:
// 构造函数
PartFilledArray(int max_number) {
this->max_number = max_number;
a = new int[max_number];
number_used = 0;
}
// 拷贝构造函数
PartFilledArray(const PartFilledArray& other) {
max_number = other.max_number;
a = new int[max_number];
number_used = other.number_used;
for (int i = 0; i < number_used; i++) {
a[i] = other.a[i];
}
}
// 析构函数
~PartFilledArray() {
delete[] a;
}
// 向数组中添加一个数
bool addValue(int value) {
if (number_used >= max_number) {
cout << "Adding to a full array." << endl;
return false;
}
a[number_used++] = value;
return true;
}
// 重载<<运算符
friend ostream& operator<<(ostream& os, const PartFilledArray& arr) {
for (int i = 0; i < arr.number_used; i++) {
os << arr.a[i] << " ";
}
return os;
}
};
int main() {
const int MAX_NUMBER = 8;
PartFilledArray a(MAX_NUMBER);
int value;
do {
cin >> value;
if (value != 0) {
a.addValue(value);
}
} while (value != 0);
cout << a << endl;
return 0;
}
```
在主函数中,我们首先创建了一个PartFilledArray对象a,大小为8,然后依次输入若干个数,输入0表示输入结束。如果输入数字的个数小于max_number,则将这些数字输出。如果输入数字的个数大于max_number,则提示“Adding to a full array.”。最后,我们重载了<<运算符,用于输出PartFilledArray对象的值。