c ++这个全局对象是如何构建的?

时间:2014-09-24 12:47:31

标签: c++

我有以下课程:

A.H:

//A.h
#pragma once

class A
{
public:
    A();
};

B.h:

//B.h
#pragma once

class B
{
public:
    B(int init);
    void bar();

private:
    double bval;
};

A.cpp:

//A.cpp
#include"A.h"
#include"B.h"

#include<iostream>

extern B b;

A::A()
{
    std::cout<<"A()\n";
    b.bar();
}

B.cpp:

//B.cpp
#include"B.h"
#include<iostream>

B::B(int init):bval(init)
{
    std::cout<<"B(int)\n";
}

void  B::bar()
{
    std::cout<<"B::Bar()  bval="<<bval<<"\n";

}

Ainit.cpp:

//Ainit.cpp
#include "A.h"
A a;

Binit.cpp:

//Binit.cpp
#include"B.h"
B b(3.14);

和一个带有空main()方法的main.cpp。

编译运行时打印的是:

A()
B::Bar()  bval=0
B(int)

所以你可以通过输出看到对象'a'是在对象'b'之前构造的, 所以在一个构造函数中,在调用时 b.bar(),是否意味着调用尚未构造的对象的成员函数?

如何将bval初始化为0?

0 个答案:

没有答案