初始化变量后在另一个类中构造对象
Construct object in another class after initializing variables
我有如下内容:
QuadMesh.h:
#include "StructureIpsim.h" // this is a struct
class QuadMesh {
public:
QuadMesh(StructureIpsim s) {//do stuff}
};
SEMPpotential.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
结构,但在将该结构传递给QuadMesh
构造函数之前,必须使用SEMPotential
构造函数中的几个函数对其进行初始化。解决这个问题的标准方法是什么?
您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
的构造函数。但我提出了一个不需要修改StructureIpsum
或QuadMesh
类定义的解决方案。
如果您想保留StructureIpsum
实例,请使用helper方法技巧对其进行初始化,然后简单地使用它来初始化网格:
SEMPotential(/* args */) : SI(ipsum_creator(args)), mesh(SI) {}
成员的初始化顺序是有保证的(这是它们在类中出现的顺序,初始化列表中的顺序没有影响)。
相关文章:
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- Qt:从另一个窗口访问公共对象
- 是否可以使用一个类来控制 C++ 中另一个类的对象?(阿杜伊诺)
- C++:将初始化的对象传递给另一个类的构造函数;需要不必要的构造函数吗?
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 结束另一个线程中使用的对象的生存期
- 如何将我编写的对象传递到另一个类的构造函数中?
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- 在C++中将对象从另一个类传递到另一个类的构造函数?
- 删除对象(另一个..)时双重释放或损坏