如何在继承类之前初始化成员变量
我正在尝试创建一个需要首先初始化成员变量的类。我知道为什么会发生这种情况,但是有没有办法解决这个问题?
当前打印顺序:第二优先
想要的打印顺序:第一秒
#include <iostream>
struct A {
A() {
std::cout << "first" << 'n';
}
};
struct B {
B() {
std::cout << "second" << 'n';
}
};
struct C : public B {
C() : a(), B() {
}
A a;
};
int main() {
C c;
return 0;
}
回答
将需要首先初始化的成员粘贴到结构中,然后在B.
struct A {
A() { std::cout << "first" << 'n'; }
};
struct B {
B() { std::cout << "second" << 'n'; }
};
struct Members { A a; };
struct C : private Members, public B {
C() : Members(), B() {}
};
int main() {
C c;
}
这样做的缺点是无法避免将“成员结构”暴露给外部世界,但这在实践中不应该成为问题。