本实验报告详细探讨了C++中的运算符重载技术。通过实例分析和代码实现,深入理解如何扩展语言功能,增强程序灵活性与可读性。
### C++实验报告 实验七-运算符重载
#### 实验目的
本次实验的主要目标是通过实际编程加深对C++中运算符重载的理解和应用。具体包括:
1. 编写程序熟悉运算符重载函数的定义和使用。
2. 编写程序熟悉重载单目和双目运算符的方法,掌握不同类型的运算符重载方式,如前缀和后缀自增运算符。
3. 编写程序熟悉流插入和提取运算符的重载。
#### 实验要求
1. 创建一个二维坐标点类 `Point`。该类别能够存放一个二维坐标点(x,y)。需要重载运算符“++”,使之能用于使坐标的 x 和 y 分别增加 1,并且要实现输出流符号的重载功能,使得 `Point` 类的对象以 (x, y) 的形式显示。
2. 完成教材P509页第17题。这一部分需要创建一个名为 IntegerSet 的类并实现一系列集合操作,如求并集、交集等。
#### 提交要求
- 将上述两个练习的代码及结果整合在一个Word文档中提交。
### 第一部分:二维坐标点类 Point
我们来看第一个实验要求中的代码实现:
```cpp
#include
using namespace std;
class Point {
private:
int x, y;
public:
Point(int x = 0, int y = 0) : x(x), y(y) {}
// 前缀自增运算符重载
Point& operator++() {
++x;
++y;
return *this;
}
// 后缀自增运算符重载
Point operator++(int) {
Point temp(*this);
x++;
y++;
return temp;
}
// 输出流运算符重载
friend ostream& operator<<(ostream &out, const Point &p) {
out << ( << p.x << , << p.y << );
return out;
}
};
int main() {
Point p(1, 3);
cout << p << endl; // 输出:(1, 3)
++p; // 前缀自增
cout << p << endl; // 输出:(2, 4)
p++; // 后缀自增
cout << p << endl; // 输出:(3, 5)
return 0;
}
```
### 第二部分:IntegerSet 类
接下来,我们来看第二个实验要求中的代码实现:
```cpp
#include
using namespace std;
class IntegerSet {
private:
bool s[101];
public:
IntegerSet() {
fill_n(s, 101, false);
}
// 构造函数,初始化集合元素
IntegerSet(int a[], int n) : IntegerSet() {
for (int i = 0; i < n; ++i)
s[a[i]] = true;
}
// 并集操作符重载
IntegerSet unionOfSets(const IntegerSet& a) const {
IntegerSet temp(*this);
for(int i = 0; i <= 100; ++i){
if(a.s[i])
temp.s[i] = true;
}
return temp;
}
// 交集操作符重载
IntegerSet intersectionOfSets(const IntegerSet& a) const {
IntegerSet temp(*this);
for(int i = 0; i <=100 ; ++i){
if(!a.s[i])
temp.s[i] = false;
}
return temp;
}
// 插入元素
void insertElement(int k) {
s[k] = true;
}
// 删除元素
void deleteElement(int k) {
s[k] = false;
}
// 打印集合内容,空集输出三个连字符(---)
void printSet() const {
bool empty = true;
for (int i = 0; i <= 100; ++i)
if(s[i]) {
cout << i << ;
empty = false;
}
if(empty) cout << ---;
cout << endl;
}
};
int main() {
int data[] = {1,2,3,4,5};
IntegerSet set1(data, 5);
IntegerSet set2;
// 插入元素
set2.insertElement(6);
set2.insertElement(7);
// 打印集合内容
cout << Set1: ;
set1.printSet(); // 输出: