【发布时间】:2013-12-12 10:06:25
【问题描述】:
让我们假设以下类:
class FileManipulator
{
static InputTypeOne * const fileone;
InputTypeTwo *filetwo;
public:
FileManipulator( InputTypeTwo *filetwo )
{
this->filetwo = filetwo;
}
int getResult();
};
FileManipulator 使用两个文件中的数据从getResult() 获取输出。这意味着对filetwo 的多次迭代和FileManipulators 的多次构造通过对不同InputTypeTwo 对象的迭代。让我们说,输入是一些 .csv 数据库。 InputTypeOne 在整个任务中保持不变。
程序本身是多模块的,上面的操作只是它的小单元。
我的问题是如何根据面向对象的范式和封装来处理 static 字段。该字段必须以某种方式初始化,因为它不是不同程序执行的固定值。据我了解 C++ 规则,我无法创建用于设置字段的方法,但在我看来,将其公开并在任何类(FileManipulator 或结识的类)之外对其进行初始化似乎与封装不一致。
那我该怎么办?我想到的唯一一件事就是以 C 方式进行,即在一个足够隔离的编译单元中对其进行初始化。这真的是我能做的吗?如何以专业的方式解决?
编辑
我将指向常量的指针更正为常量指针,这是我的初衷。
【问题讨论】:
-
static成员也可以是protected或private。 -
我知道,但是我该如何初始化它们呢?
-
如何初始化非静态成员?
-
从描述中真的不清楚为什么你甚至想要使用静态字段,而不是成员变量。我读过的大多数 OO 文本都对类变量皱眉,这是静态提供的。
-
在构造函数中。重点是静态成员初始化不能放在任何函数体中。
标签: c++ encapsulation static-members static-initialization