#include <iostream>
class BarParent
{
public:
int x;
virtual void fuz() = 0;
};
class BarChild : public BarParent
{
public:
BarChild(int new_x){x = new_x;}
virtual void fuz(){}
};
class FooParent
{
public:
BarParent* p_barPar;
FooParent (BarChild* new_p_bar)
{
p_barPar = new_p_bar;
std::cout << p_barPar->x << std::endl;
}
};
class FooChild: public FooParent
{
public:
BarChild barChild;
FooChild(int new_x):FooParent(&barChild), barChild(new_x){}
};
int main()
{
FooChild foo(60);
BarChild bar(99);
FooParent fooP(&bar);
}
-548726160
99
我明白为什么我得到这个结果(未定义的行为),barChild
它initiailized之前被使用。我的问题是做这件事的'正确'是什么。
@zneak一个简单MWE将使用户建议只是“重新排序的成员。” – aiao
据我所知,你只需要一个需要用成员字段进行初始化的基类。 – zneak