1444: 小恶魔的类(20年期末考T1)
题目
题目描述
助教是个小恶魔,但她最后还是决定放大家一马,于是她决定让大家写个 $Evil$ 类。
$Evil$ 类内存储一个小恶魔的所有信息,类中元素包括:
- $st$ 和 $ed$ 。表示小恶魔在第 $st$ 天到第 $ed$ 天出现;
- 数组 $data[]$ 。存储小恶魔的能量值,第 $i(st \leq i \leq ed)$ 天的能量值为 $data[i]$ ;
- $val$ 。表示小恶魔的邪恶指数,由于某些原因,小恶魔的邪恶指数 $val$ 只增不减。
你需要实现以下函数:
- $Evil$ 类中的构造函数
-
默认 $st$ , $ed$ , $val$ 均为 $0$ , $data[]$ 初值均为 $0$
-
$Evil$ 类中的下标运算符重载
operator []
- 输入 $data[i]$, 返回保存第 $i$ 天的能量值的变量
-
若 $i$ 不满足 $\mathbf {st \le i \le ed}$ ,返回第 $st$ 天的能量值
-
$Evil$ 类中的赋值运算符重载
operator =
-
$Evil$ 类中前置++和后置++的重载
-
每次类中的 $val$ 加 $1$
-
$Evil$ 类中的输出运算符重载
operator <<
- 每次输出一行,共 $ed-st+2$ 个数,其中第一个值为 $val$,接着输出 $st$ 天到 $ed$ 天的能量值 $data[]$
-
数字用空格隔开,结尾输出换行符
-
$Evil$ 类中的析构函数
特别注意:
-
不能在类中定义新的成员变量,不能修改成员变量的类型(如将
private
类型修改为public
类型),不能修改类中已经给定的函数,可以新增加函数。 -
如果未实现输出运算符重载,可以通过类中的
Print()
函数达到同样效果。 -
数据保证都在
int
范围内,即不需要也不能更改成员变量的类型。 -
无论测试哪个数据点,都会调用构造函数,请大家务必要写构造函数。
-
程序最终会检查内存泄漏问题,若出现内存泄漏,则得分为原来的80%。
```c++
ifndef EVIL_HPP
define EVIL_HPP
include
using namespace std;
class Evil{ private: int st, ed, val; int *data;
public:
//构造函数 //下标运算符重载 //赋值运算符重载 //前缀++重载 //后缀++重载 //输出重载 //析构函数
void Print(){
cout << val << " ";
for(int i = 0;i < ed-st+1;++i)
cout << data[i] <<" ";
cout << endl;
}
};
endif//EVIL_HPP
main.cpp:
c++
include
include "evil.hpp"
using namespace std;
int main(){ int T; cin >> T ; while (T--) { int type; cin >> type;
int test_0_st, test_0_ed, test_0_val;
cin >> test_0_st >> test_0_ed >> test_0_val;
Evil test_0_0(test_0_st, test_0_ed, test_0_val);
if (type == 0){
test_0_0.Print();
Evil test_0_1;
test_0_1.Print();
}
if(type == 1){
Evil test_1_1;
test_1_1 = test_0_0;
test_1_1.Print();
}
if(type == 2){
for(int i = test_0_st;i <= test_0_ed;++i) test_0_0[i] = i;
test_0_0[test_0_st-1] = test_0_st-1;
cout << test_0_0[test_0_st-1] << " " << test_0_0[test_0_ed+1] <<" ";
test_0_0.Print();
}
if(type == 3){
test_0_0++;
test_0_0++;
test_0_0.Print();
++test_0_0; ++test_0_0;
test_0_0.Print();
}
if(type == 4){
cout << test_0_0;
}
}
return 0;
} ```
输入格式
第一行有一个整数 $T$,表示数据组数。
之后有 $T$ 行,每行的第一个整数 $type$ 表示测试类型,第 $2-4$ 个数表示初始的 $Evil$ 类中 $st$ , $ed$ , $val$ 。
$type=0$ 时,测试构造函数。
$type=1$ 时,测试赋值运算符的重载。
$type=2$ 时,测试下标运算符的重载。
$type=3$ 时,测试前缀++和后缀++的重载
$type=4$ 时,测试输出运算符的重载
保证一个测试文件中的 $type$ 都相等。
输出格式
具体输出格式请看主函数。
样例输入
5
0 1 10 3
1 2 5 6
2 3 6 8
3 4 9 8
4 2 9 10
样例输出
3 0 0 0 0 0 0 0 0 0 0
0 0
6 0 0 0 0
2 2 8 2 4 5 6
10 0 0 0 0 0 0
12 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0
数据范围
| 测试点编号 | $type$ | Hint| 分值 | | ------- | ----- | -----| ----| | $1$ | 0 | 测试构造函数 | 10% | | $2$ | 1 | 测试赋值运算符的重载 | 10% | | $3-5$ | 2 | 测试下标运算符的重载 | 30%| | $6-7$ | 3 | 测试前缀++和后缀++重载 | 20% | | $8-10$ | 4 | 测试输出运算符重载 | 30% |
Oops! 本题目还没有解答!
助教老师们编题的速度,已经超过了解题的速度!
OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。
如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!