为什么我的代码有两个实例,一个用于父类,一个用于子类。我认为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
[创建child
时,首先调用Mother
构造函数并执行instance++
,然后调用Child
构造函数并再次执行instance++
。这就是为什么您获得2
。
C0]中的[Child
类inherits –即Mother
是Mother
的基类。因此,当实例化Child
对象时,也会调用Child
的构造函数,并且在执行Mother
的构造函数的主体之前也是如此。
在您的代码中,Child
和Mother
构造函数都将静态数据成员Child
增加1,这就是为什么要得到2而不是1的原因。要获得所需的行为,只需不修改instance
中的instance
:
Child::Child()