静态成员和c++中的封装



让我们假设以下类:

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的逻辑。

最新更新