2、一个整数数组类Array,,数组大小在定义时初始化。假设这个类现在已经给出,请你继承这个类,用以实现一个集合类,功能要求如下: 加入一个元素到集合中 判断一个元素是否在集合中 取两个集合的交集,用重载”+运算符实现 #include <iostream> #include <assert.h> class Array { int *p; int size; public: Array(int a) { size = a; if(a>0) p = new int[a]; } virtual~Array(){delete []p;p = NULL;} int &operator[](int x) { assert(x>=0); if(size > 0)return p[x]; }
时间: 2024-01-06 13:04:55 浏览: 121
数据结构(JAVA)求一个含有n个整数元素的数组a0..n-1中的最大元素
下面是继承Array类并实现集合类的代码:
```c++
#include <iostream>
#include <assert.h>
class Set : public Array {
public:
Set(int a) : Array(a) {}
void add(int x) {
for (int i = 0; i < size; i++) {
if (p[i] == x) {
return;
}
}
Array::operator[](size) = x;
size++;
}
bool contains(int x) {
for (int i = 0; i < size; i++) {
if (p[i] == x) {
return true;
}
}
return false;
}
Set operator+(const Set& other) {
Set result(size + other.size);
int count = 0;
for (int i = 0; i < size; i++) {
if (other.contains(p[i])) {
result[count] = p[i];
count++;
}
}
result.size = count;
return result;
}
};
int main() {
Set s1(5);
s1.add(1);
s1.add(2);
s1.add(3);
s1.add(4);
Set s2(5);
s2.add(3);
s2.add(4);
s2.add(5);
Set s3 = s1 + s2;
for (int i = 0; i < s3.size; i++) {
std::cout << s3[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
使用示例:
首先创建两个集合 `s1` 和 `s2`,并向其中添加元素。然后使用 `+` 运算符计算两个集合的交集,结果保存在 `s3` 中。最后遍历 `s3` 并输出其中的元素。
输出结果为:
```
3 4
```
因此,程序正确实现了集合类的功能。
阅读全文