【发布时间】:2020-11-29 00:29:55
【问题描述】:
这是我期末考试的模拟测试。我必须能够解释这些代码是如何工作的。但老实说,我不太了解这段代码。 你们能解释一下我这是如何工作的吗?如果我能完全理解它,我会很高兴为我的决赛做好准备。谢谢。
#include <iostream>
using namespace std;
class Wind {
int category;
public:
Wind(int cat = 3) {
category = cat;
cout << "1." << cat << endl;
}
virtual void increase(int amount) {
category += amount;
cout << "A. " << category << endl;
}
void operator++() {
++category;
cout << "B. " << category << endl;
}
virtual ~Wind() {
cout << "C. " << category << endl;
}
};
class Tornado : public Wind {
double velocity;
public:
Tornado(int cat, double vel) : Wind(cat) {
velocity = vel;
cout << "2. " << vel << endl;
}
virtual void increase(int value) {
velocity += value;
cout << "X. " << velocity << endl;
}
void operator++() {
Wind::operator++();
velocity += 20;
cout << "Y. " << endl;
}
~Tornado() {
cout << "Z. " << velocity << endl;
}
};
int main() {
Wind* wind_array[2];
wind_array[0] = new Tornado(7, 66.5);
wind_array[1] = new Wind(5);
for (int i = 0; i < 2; i++) {
wind_array[i]->increase(5);
++(*wind_array[i]);
}
for (int i = 0; i < 2; i++)
delete wind_array[i];
return 0;
}
这是输出。
1.7
2. 66.5
1.5
X. 71.5
B. 8
A. 10
B. 11
Z. 71.5
C. 8
C. 11
【问题讨论】:
-
请更具体一些。你不明白这段代码的哪一部分?你期望什么输出,你得到什么实际输出?
-
我想我只了解前 3 行。但我什至不确定我是否理解正确。所以我想知道这段代码整体是如何工作的。
-
因此,本质上,您希望有人向您解释有关代码如何工作的一切。那不会发生。该代码有几个元素相互作用 - 从“我只理解前三行”开始意味着任何人都必须付出巨大的努力来帮助你 - 并且处理你提出的基本问题,这些问题在任何介绍性中都有回答C++ 教科书。您可能需要从阅读任何关于 C++ 的基本介绍性文本开始——而且,最好是寻求理解——。
-
对不起,其他部分我很努力,但我无法理解这一点。我仍然不明白为什么我们要定义虚函数的工作方式,因为我知道我们不应该为虚函数定义任何东西,而且我无法理解代码是如何工作的,我太绝望了。
-
我真的建议你调试它,当你一步一步地接受它时非常简单:) 如果你不理解具体的输出,请询问我们。请记住,++是重载的,tornado是派生类,这意味着它将执行父亲的构造函数和之后的构造函数。
标签: c++