让我们假设以下类:
class FileManipulator
{
static InputTypeOne * const fileone;
InputTypeTwo *filetwo;
public:
FileManipulator( InputTypeTwo *filetwo )
{
this->filetwo = filetwo;
}
int getResult();
};
FileManipulator
使用来自两个文件的数据来获得来自getResult()
的输出。这意味着对filetwo
的多次迭代以及通过对不同InputTypeTwo
对象的迭代来对FileManipulators
的多次构造。比如说,输入是一些.csv数据库。CCD_ 6对于整个任务保持不变。
程序本身是多模块的,上面的操作只是它的一个小单元。
我的问题是如何根据面向对象的范例和封装来处理static
字段。字段必须以某种方式初始化,因为它在不同的程序执行中不是固定值。就我对C++规则的理解而言,我无法创建一个用于设置字段的方法,但在我看来,将其公开并在任何类(FileManipulator
或朋友类)之外初始化它似乎与封装不一致。
那我该怎么办?我想到的唯一一件事是用C的方式来做,即在一个足够独立的编译单元中初始化它。这真的是我能做的全部吗?如何以专业的方式解决这一问题?
编辑
我将指针更正为常量对常量指针,这是我最初的意图。
您可以编写FileManipulator的公共静态方法,为您初始化字段:
static void init()
{
fileone = something();
}
然后从main()或初始化程序的某个地方调用它。
脑海中浮现的一种方法是:
在.cpp文件中
FileManipulator::fileone = NULL;
然后修改构造函数以执行以下操作:
FileManipulator( InputTypeTwo *filetwo, InputTypeOne *initValue = NULL)
{
if(fileone == NULL)
{
fileone = initValue;
}
this->filetwo = filetwo;
}
或者,您也可以定义一个init函数,并确保在使用该类之前和在CTOR之后调用它。init函数将包括如何初始化fileone的逻辑。