C++ 关于派生类如何工作的问题
这是我期末考试的模拟测试。我必须能够解释这些代码是如何工作的。但老实说,我不太理解这段代码。 你们能解释一下我的工作原理吗?如果我能完全理解,我将非常高兴为期末考试做好准备。多谢各位C++ 关于派生类如何工作的问题,c++,C++,这是我期末考试的模拟测试。我必须能够解释这些代码是如何工作的。但老实说,我不太理解这段代码。 你们能解释一下我的工作原理吗?如果我能完全理解,我将非常高兴为期末考试做好准备。多谢各位 #include <iostream> using namespace std; class Wind { int category; public: Wind(int cat = 3) { category = ca
#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-增加tornado(虚拟函数,因此不会执行基类增加)
B.8-++风(不是一个虚拟函数-因此不会执行tornado的+)
A.10-增加风
B.11-++风
Z.71.5-毁灭者龙卷风
C.8-析构函数风(风是基类)
C.11-销毁装置风请更具体一些。你到底不明白这段代码的哪一部分?你期望得到什么样的输出,你得到什么样的实际输出?我想我只理解前3行。但我甚至不确定我是否理解正确。所以我想知道这段代码的总体工作原理。所以,本质上,你希望有人向你解释这段代码是如何工作的。那不会发生。这个代码有几个元素相互作用——从“我只理解前三行”开始,意味着任何人都必须花费巨大的精力来帮助你,并处理你在C++的任何入门教科书中回答的基本问题。你可能需要从阅读开始,更好地,试图理解——任何关于C++的基本入门文本。对不起,我试过其他部分,但我不能理解这一部分。我还是不明白为什么我们要定义虚拟函数是如何工作的,因为我知道我们不应该为虚拟函数定义任何东西,我不能理解代码基本上是如何工作的,我太绝望了。我真的建议你去调试它,当你一步一步地进行时,这很简单:)如果你不能理解具体的输出,请询问我们。请记住,++是重载的,tornado是派生类,这意味着它将执行父构造函数和后构造函数。非常感谢,但我有几个问题。在第4行中,即使是虚函数,指针也分配在基函数中。那么它不应该称之为基数增加吗?如果是++的话,它在执行base操作符后不也应该调用派生的++吗?当它调用析构函数时,正如我所知,析构函数会首先破坏最近的对象。它是否应该先破坏数组1而不是数组0?1。虚拟函数“last”重写是最强的,它将搜索“最低”的可用实现并执行它,而不是基类中的实现。在这种情况下,龙卷风的实施。2.不,因为++不是虚拟函数,这意味着它将只执行基类实现。3.析构函数在0元素上被显式调用,然后在1元素上被显式调用,因此它将按此顺序调用。非常感谢。我想现在我什么都懂了。但最后一件事。在派生的析构函数中,为什么在该函数工作后调用基本析构函数?而不是像在构造函数中那样立即调用基析构函数?我认为这是一个很好的答案->
1.7
2. 66.5
1.5
X. 71.5
B. 8
A. 10
B. 11
Z. 71.5
C. 8
C. 11