假设C++类具有以下形式的构造函数(除其他构造函数外)
Foo::Foo( FILE *fp ) { etc... }
现在我要创建表单的包装类
class WFoo {
Foo::Foo A;
Foo::Foo B;
};
与构造函数
WFoo::WFoo(FILE *fa, FILE *fb) {
A(fa), B(fb);
}
WFoo的定义有什么问题?
提前致谢。
最佳答案
这没有任何意义...
class WFoo {
Foo::Foo A;
Foo::Foo B;
};
你的意思是...
class WFoo {
public:
Foo A;
Foo B;
WFoo(FILE* fa, FILE* fb);
};
WFoo::WFoo(FILE* fa, FILE* fb) :
A(fa), B(fb)
{
}
还请记住,字段的初始化不是按照您在构造函数中读取的顺序进行,而是按照在类中声明的顺序进行初始化!
所以...
#include <iostream>
struct XFoo
{
XFoo(const char* s) { std::cout << s << std::endl; }
};
struct YBar
{
XFoo a;
XFoo b;
YBar() : a("A"), b("B") {}
};
struct ZBar
{
XFoo b;
XFoo a;
ZBar() : a("A"), b("B") {}
};
int main()
{
YBar y;
ZBar z;
return 0;
}
将打印出来...
A
B
B
A