为什么我的代码使用两个实例而不是一个?

问题描述 投票:0回答:2

为什么我的代码有两个实例,一个用于父类,一个用于子类。我认为main()中的代码只要求一个。我试图理解为什么会发生这种情况,但是我不知道要解决这个问题...

#include <iostream>

class Mother {
public:
    static int instance;
    Mother() {
        std::cout << "Mother constructor" << std::endl;
        instance++;
    }

    int get_instance() {
        return instance;
    }
};

class Child : public Mother {
public:
    Child() {
        std::cout << "Child constructor" << std::endl;
        this->instance++;
    }
};

int Mother::instance = 0;

int main() {
    Child child;
    std::cout << "instance: " <<  Mother::instance << std::endl;
}

控制台返回

clang++  -std=c++11 -Wconversion *.cpp && ./a.out
Mother constructor
Child constructor
instance<int>: 2
c++ class inheritance instance
2个回答
0
投票

[创建child时,首先调用Mother构造函数并执行instance++,然后调用Child构造函数并再次执行instance++。这就是为什么您获得2


0
投票

C0]中的[Childinherits –即MotherMother基类。因此,当实例化Child对象时,也会调用Child的构造函数,并且在执行Mother的构造函数的主体之前也是如此。

在您的代码中,ChildMother构造函数都将静态数据成员Child增加1,这就是为什么要得到2而不是1的原因。要获得所需的行为,只需不修改instance中的instance

Child::Child()
© www.soinside.com 2019 - 2024. All rights reserved.