[选做]下面是一个数组类CArray的定义。要求: (1)在此基础上增加print()成员函数打印数组, (2)重载“=”、“+”、“-” 运算符使之能对该数组类对象进行赋值、加减运算。 (3)写出主函数对该类进行测试。 class CArray {private: int* p_arr; int size; public: CArray(); //缺省构造函数 CArray(int* p_a,int s); //构造函数 CArray(const CArray &r_other);//复制构造函数 ~CArray();//析构函数 int operator[](int pos) const; //访问数组元素值的下标运算符重载函数 int& operator[](int pos); //设置数组元素值的下标运算符重载函数 CArray &operator=(const CArray &other)//赋值运算符“=”重载函数 CArray operator+(const CArray &other) //加运算符“+”重载函数 CArray operator-(const CArray &other) //减运算符“-”重载函数 void print() const; }; CArray:: CArray() { p_arr=NULL; size=0;} CArray:: CArray(int* p_a,int s) { if(s>0) { size=s; p_arr=new int[size]; for(int i=0;i<size;i++) p_arr[i]=p_a[i]; } Else { p_arr=NULL; size=0; } } CArray::CArray(const CArray &r_other) { size=r_other.size; if(size) { p_arr=new int[size]; for(int i=0;i<size;i++) p_arr[i]=r_other.p_arr[i]; } } CArray::~CArray() { if(p_arr) delete[] p_arr; p_arr=NULL; size=0; } int CArray::operator[](int pos) const { if(pos>=size) return p_arr[size-1]; if(pos<0) return p_arr[0]; return p_arr[pos]; } int& CArray::operator[](int pos) { if(pos>=size) return p_arr[size-1]; if(pos<0) return p_arr[0]; return p_arr[pos]; }
时间: 2024-03-03 18:47:10 浏览: 176
深入分析MFC中的CArray类
好的,下面是修改后的CArray类的实现:
```c++
#include <iostream>
using namespace std;
class CArray {
private:
int* p_arr;
int size;
public:
CArray(); // 缺省构造函数
CArray(int* p_a, int s); // 构造函数
CArray(const CArray& r_other); // 复制构造函数
~CArray(); // 析构函数
int operator[](int pos) const; // 访问数组元素值的下标运算符重载函数
int& operator[](int pos); // 设置数组元素值的下标运算符重载函数
CArray& operator=(const CArray& other); // 赋值运算符“=”重载函数
CArray operator+(const CArray& other); // 加运算符“+”重载函数
CArray operator-(const CArray& other); // 减运算符“-”重载函数
void print() const;
};
CArray::CArray() {
p_arr = NULL;
size = 0;
}
CArray::CArray(int* p_a, int s) {
if (s > 0) {
size = s;
p_arr = new int[size];
for (int i = 0; i < size; i++)
p_arr[i] = p_a[i];
}
else {
p_arr = NULL;
size = 0;
}
}
CArray::CArray(const CArray& r_other) {
size = r_other.size;
if (size) {
p_arr = new int[size];
for (int i = 0; i < size; i++)
p_arr[i] = r_other.p_arr[i];
}
}
CArray::~CArray() {
if (p_arr)
delete[] p_arr;
p_arr = NULL;
size = 0;
}
int CArray::operator[](int pos) const {
if (pos >= size)
return p_arr[size - 1];
if (pos < 0)
return p_arr[0];
return p_arr[pos];
}
int& CArray::operator[](int pos) {
if (pos >= size)
return p_arr[size - 1];
if (pos < 0)
return p_arr[0];
return p_arr[pos];
}
CArray& CArray::operator=(const CArray& other) {
if (this == &other)
return *this;
if (p_arr)
delete[] p_arr;
size = other.size;
if (size) {
p_arr = new int[size];
for (int i = 0; i < size; i++)
p_arr[i] = other.p_arr[i];
}
else {
p_arr = NULL;
}
return *this;
}
CArray CArray::operator+(const CArray& other) {
int new_size = size + other.size;
int* new_p_arr = new int[new_size];
for (int i = 0; i < size; i++)
new_p_arr[i] = p_arr[i];
for (int i = 0; i < other.size; i++)
new_p_arr[size + i] = other.p_arr[i];
CArray new_array(new_p_arr, new_size);
delete[] new_p_arr;
return new_array;
}
CArray CArray::operator-(const CArray& other) {
int new_size = size;
int* new_p_arr = new int[new_size];
for (int i = 0; i < size; i++)
new_p_arr[i] = p_arr[i];
for (int i = 0; i < other.size; i++) {
for (int j = 0; j < new_size; j++) {
if (new_p_arr[j] == other.p_arr[i]) {
for (int k = j; k < new_size - 1; k++)
new_p_arr[k] = new_p_arr[k + 1];
new_size--;
break;
}
}
}
CArray new_array(new_p_arr, new_size);
delete[] new_p_arr;
return new_array;
}
void CArray::print() const {
for (int i = 0; i < size; i++)
cout << p_arr[i] << " ";
cout << endl;
}
int main() {
int arr1[] = { 1, 2, 3 };
int arr2[] = { 2, 3, 4 };
CArray a(arr1, 3);
CArray b(arr2, 3);
CArray c = a + b;
CArray d = a - b;
c.print();
d.print();
return 0;
}
```
在主函数中对CArray类进行了测试,输出结果为:
```
1 2 3 2 3 4
1
```
符合要求。
阅读全文