1.下面是一个整型数组类intArray的声明,请给出该类所有数据成员的类外定义。要求: (1)能通过对“>>”、“<<”的重载实现数组元素的直接输入及其输出。输入时,第一次输入的值为数组长度,后面连续输入若干个数作为数组内容。输出时,首先提示该数组元素个数,然后依次输出该数组各元素; (2)重载“=”、“+”、“-” 运算符使之能对两个数组类对象进行直接赋值、加减运算。 (3)写出主函数对该类进行测试。要求: 1)先构造包含10个数组元素的数组对象a,再调用流提取运算符重载函数实现a的元素初始化(元素值分别为1—10),输出a数组; 2)并利用a来构造数组b,输出数组b,并调用get函数获取b中下标为奇数的各元素值并输出,然后调用set函数将上述元素值乘以2,输出b数组; 3)构造一个包含5个元素的数组c,其值全为1,输出该数组,再调用ReSize函数将其大小重置为10,调用“=”重载函数将a的值复制给c,输出数组c; 4)分别将b+c,b-c的值送给数组d和数组e,并输出结果。
时间: 2023-07-16 22:11:42 浏览: 104
整型数组与Object数组的互操.rar_互操作_数组_整型与object
intArray类的数据成员的类外定义如下:
```c++
#include<iostream>
using namespace std;
class intArray{
private:
int* data;
int size;
public:
intArray(int s = 0):size(s){
if(size == 0) data = nullptr;
else data = new int[size];
}
intArray(const intArray& a){
size = a.size;
data = new int[size];
for(int i = 0; i < size; i++){
data[i] = a.data[i];
}
}
~intArray(){
if(data != nullptr) delete [] data;
}
friend istream& operator>>(istream& in, intArray& a){
int s;
in >> s;
if(a.data != nullptr) delete [] a.data;
a.size = s;
a.data = new int[s];
for(int i = 0; i < s; i++){
in >> a.data[i];
}
return in;
}
friend ostream& operator<<(ostream& out, const intArray& a){
out << "数组元素个数为:" << a.size << endl;
for(int i = 0; i < a.size; i++){
out << a.data[i] << " ";
}
out << endl;
return out;
}
intArray& operator=(const intArray& a){
if(this == &a) return *this;
if(data != nullptr) delete [] data;
size = a.size;
data = new int[size];
for(int i = 0; i < size; i++){
data[i] = a.data[i];
}
return *this;
}
intArray operator+(const intArray& a){
intArray tmp(size);
for(int i = 0; i < size; i++){
tmp.data[i] = data[i] + a.data[i];
}
return tmp;
}
intArray operator-(const intArray& a){
intArray tmp(size);
for(int i = 0; i < size; i++){
tmp.data[i] = data[i] - a.data[i];
}
return tmp;
}
void get(int* arr, int s){
int j = 0;
for(int i = 0; i < size; i++){
if(i % 2 == 1){
arr[j] = data[i];
j++;
}
}
}
void set(int* arr, int s){
int j = 0;
for(int i = 0; i < size; i++){
if(i % 2 == 1){
data[i] = arr[j] * 2;
j++;
}
}
}
void ReSize(int s){
if(size == s) return;
int* tmp = new int[s];
for(int i = 0; i < min(size,s); i++){
tmp[i] = data[i];
}
if(data != nullptr) delete [] data;
size = s;
data = tmp;
}
};
int main(){
// 1.先构造包含10个数组元素的数组对象a,再调用流提取运算符重载函数实现a的元素初始化(元素值分别为1—10),输出a数组;
intArray a(10);
cin >> a;
cout << a;
// 2.并利用a来构造数组b,输出数组b,并调用get函数获取b中下标为奇数的各元素值并输出,
// 然后调用set函数将上述元素值乘以2,输出b数组;
intArray b = a;
cout << b;
int odd[5];
b.get(odd, 5);
cout << "下标为奇数的元素值为:";
for(int i = 0; i < 5; i++){
cout << odd[i] << " ";
}
cout << endl;
b.set(odd, 5);
cout << b;
// 3.构造一个包含5个元素的数组c,其值全为1,输出该数组,
// 再调用ReSize函数将其大小重置为10,调用“=”重载函数将a的值复制给c,输出数组c;
intArray c(5);
for(int i = 0; i < 5; i++){
c[i] = 1;
}
cout << c;
c.ReSize(10);
c = a;
cout << c;
// 4.分别将b+c,b-c的值送给数组d和数组e,并输出结果。
intArray d = b + c;
intArray e = b - c;
cout << d;
cout << e;
return 0;
}
```
阅读全文