初始化变量后,在另一个类中构造对象

时间:2014-04-09 23:35:08

标签: c++ class

我有以下内容:

QuadMesh.h:

#include "StructureIpsim.h"  // this is a struct

class QuadMesh {

public:
QuadMesh(StructureIpsim s) {//do stuff}

};

SEMPotential.h:

#include "QuadMesh.h"
#include "SpecialFuncs.h"

class SEMPotential {

public:
StructureIpsim SI;
QuadMesh mesh;
SEMPotential( //args);

};

SEMPotential::SEMPotential( //args) {
// init structure in here, need to call functions from SpecialFuncs.h to do so
// How to construct the QuadMesh object mesh?  Can't put in initialization list.
}

如您所见,QuadMesh对象接收StructureIpsim sruct,但在传递给{{SEMPotential之前,必须使用QuadMesh的构造函数中的几个函数初始化此结构。 1}}构造函数。这是什么标准方法?

1 个答案:

答案 0 :(得分:0)

CAN 使用初始化列表。使用辅助函数,该函数可能是私有静态成员函数,它接受相关参数,进行计算并返回QuadMesh对象。使用初始化列表从该帮助程序的返回值初始化成员。

class SEMPotential
{
    static QuadMesh mesh_creator( /* args */ );
public:
    QuadMesh mesh;
    SEMPotential(/* args */) : mesh(mesh_creator(args)) {}
};

QuadMesh SEMPotential::mesh_creator( /*args*/ )
{
    StructureIpsum s;
    // init structure in here, calling functions from SpecialFuncs.h to do so
    return QuadMesh(s);
}

Matt McNabb在评论中指出,辅助函数可能StructureIpsum的构造函数。但我提出的解决方案并不需要修改StructureIpsumQuadMesh类定义。

如果要保留StructureIpsum实例,请使用辅助方法技巧对其进行初始化,然后使用它来初始化网格:

SEMPotential(/* args */) : SI(ipsum_creator(args)), mesh(SI) {}

保证成员的初始化顺序(它们在类中出现的顺序,初始化列表中的顺序无效)。