-1

让我们假设以下类:

class FileManipulator
{
    static InputTypeOne * const fileone;
    InputTypeTwo *filetwo;

    public:
    FileManipulator( InputTypeTwo *filetwo )
    {
        this->filetwo = filetwo;
    }
    int getResult();
};

FileManipulator使用两个文件中的数据从getResult(). 这意味着针对不同对象的多次迭代filetwo和通过迭代的多次构造。让我们说,输入是一些 .csv 数据库。整个任务保持不变。FileManipulatorsInputTypeTwoInputTypeOne

程序本身是多模块的,上面的操作只是它的小单元。

我的问题是如何static根据面向对象的范式和封装来处理该领域。该字段必须以某种方式初始化,因为它不是不同程序执行的固定值。据我了解 C++ 规则,我无法创建设置字段的方法,但在我看来,将其公开并在任何类(FileManipulator或友好的类)之外对其进行初始化似乎与封装不一致。

那我能做什么?我想到的唯一一件事就是以 C 方式进行,即在一个足够隔离的编译单元中对其进行初始化。这真的是我能做的吗?如何以专业的方式解决?

编辑

我将指向常量的指针更正为常量指针,这是我的初衷。

4

2 回答 2

0

想到的一种方法是:

在 .cpp 文件中

FileManipulator::fileone = NULL;

然后修改构造函数以执行以下操作:

FileManipulator( InputTypeTwo *filetwo,  InputTypeOne  *initValue = NULL)
{
    if(fileone == NULL)
    {
        fileone = initValue;
    }
    this->filetwo = filetwo;
 }

或者您也可以定义一个 init 函数并确保在使用类之前和 CTOR 之后调用它。init 函数将包含如何初始化 fileone 的逻辑。

于 2013-12-12T10:14:33.470 回答
0

您可以编写 FileManipulator 的公共静态方法来为您初始化字段:

static void init()
{
  fileone = something();
}

然后从 main() 或正在初始化程序的某个地方调用它。

于 2013-12-12T10:14:04.600 回答