我有以下课程:
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?