X字母可以放大和缩小,变为n行X(n=1,3,5,7,9,...,21)。例如,3行x图案如下: 现假设一个n行(n>0,奇数)X图案,遥控器可以控制X图案的放大与缩小。遥控器有5个按键,1)show,显示当前X图案;2)show++, 显示当前X图案,再放大图案,n+2;3)++show,先放大图案,n+2,再显示图案;4)show--,显示当前X图案,再缩小图案,n-2;5)--show,先缩小图案,n-2,再显示图案。假设X图案的放大和缩小在1-21之间。n=1时,缩小不起作用,n=21时,放大不起作用。 用类CXGraph表示X图案及其放大、缩小、显示。主函数模拟遥控器,代码如下,不可修改。请补充CXGraph类的定义和实现。 int main() { int t, n; string command; cin >> n; CXGraph xGraph(n); cin >> t; while (t--) { cin >> command; if (command == "show++") { cout << xGraph++ << endl; } else if(command == "++show") { cout << ++xGraph << endl; } else if (command == "show--") { cout << xGraph-- << endl; } else if (command == "--show") { cout << --xGraph << endl; } else if (command == "show") { cout << xGraph << endl; } } return 0; } 输入 第一行n,大于0的奇数,X图案的初始大小。 第二行,操作次数 每个操作一行,为show、show++、show--、--show、++show之一,具体操作含义见题目。 输出 对每个操作,输出对应的X图案。
时间: 2024-02-15 22:09:52 浏览: 116
以下是CXGraph类的定义和实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
class CXGraph {
private:
int n; // 当前X图案的大小,即行数
public:
CXGraph(int n) {
this->n = n;
}
// 显示当前X图案
friend ostream& operator<<(ostream& os, const CXGraph& xGraph) {
int mid = xGraph.n / 2 + 1; // 中间行的行数
for (int i = 1; i <= xGraph.n; i++) {
for (int j = 1; j <= xGraph.n; j++) {
if (i == j || i + j == xGraph.n + 1) {
cout << "X";
} else {
cout << " ";
}
}
cout << endl;
}
return os;
}
// 放大图案,n+2
CXGraph& operator++() {
if (n < 21) {
n += 2;
}
return *this;
}
// 缩小图案,n-2
CXGraph& operator--() {
if (n > 1) {
n -= 2;
}
return *this;
}
// 放大图案,n+2,再显示当前X图案
CXGraph operator++(int) {
CXGraph tmp(*this);
++(*this);
cout << *this << endl;
return tmp;
}
// 缩小图案,n-2,再显示当前X图案
CXGraph operator--(int) {
CXGraph tmp(*this);
--(*this);
cout << *this << endl;
return tmp;
}
};
```
在CXGraph类中,我们定义了四个操作符重载函数,分别对应题目中的五个操作。其中,前置++和--表示放大和缩小图案并返回一个引用,后置++和--表示放大和缩小图案并返回一个副本。在前置++和--的实现中,我们需要注意图案大小的上下限(1-21),在超出限制时不进行操作。而在后置++和--的实现中,我们需要先返回一个当前图案的副本,再进行放大或缩小操作,并显示当前的X图案。
最后,在主函数中,我们使用CXGraph类的对象xGraph,通过重载<<运算符,可以直接输出当前的X图案。通过重载++和--运算符,我们可以方便地实现遥控器的操作。