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