围绕C++课程的包装

Ilo*_*aja 1 c++ wrapper

假设C++类具有表单的构造函数(以及其他构造函数)

Foo::Foo( FILE *fp ) { etc... }
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个表单的包装类

class WFoo {
      Foo::Foo A;
      Foo::Foo B;
 };
Run Code Online (Sandbox Code Playgroud)

与构造函数

WFoo::WFoo(FILE *fa, FILE *fb) {
      A(fa), B(fb);
}
Run Code Online (Sandbox Code Playgroud)

WFoo的定义有什么问题?提前致谢.

Sal*_*iti 9

这没有任何意义......

class WFoo {
      Foo::Foo A;
      Foo::Foo B;
 };
Run Code Online (Sandbox Code Playgroud)

你的意思是...

class WFoo {
public:
      Foo A;
      Foo B;

      WFoo(FILE* fa, FILE* fb);
 };

WFoo::WFoo(FILE* fa, FILE* fb) :
    A(fa), B(fb)
{
}
Run Code Online (Sandbox Code Playgroud)

还要记住,字段的初始化不是按照在构造函数中读取的顺序而是按照它们在类中声明的顺序进行初始化!

所以...

#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;
}
Run Code Online (Sandbox Code Playgroud)

会打印出来......

A
B
B
A
Run Code Online (Sandbox Code Playgroud)