#include <iostream>
using namespace std;
class A
{
int x;
public:
A() { cout << "A's constructor called " << endl; }
};
class B
{
static A a;
public:
B() { cout << "B's constructor called " << endl; }
static A getA() { return a; }
};
A B::a; // definition of a
int main()
{
B b1, b2, b3;
A a = b1.getA();
return 0;
}
輸出:
A的構造函數稱爲
B的構造方法中調用
B的構造方法中調用
B的構造方法中調用爲什麼在包含類的構造函數之前調用靜態成員的構造函數?
我無法理解我們是如何得出上述輸出以及如何對象申報第二堂課上一堂課。
爲什麼你認爲輸出是錯誤的? – drescherjm
類「B」中的'A'靜態聲明導致調用第一個構造函數。編譯器會在調用'main'之前發出代碼來初始化全局變量和* static *變量。 –
如果你用調試器遍歷你的代碼,它應該變得很清楚爲什麼它的行爲如此。 '靜態A a;'是一個靜態對象,將爲'B'的所有實例實例化一次。 –