静态成员和c++中的封装
static members and encapsulation in 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的逻辑。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将可变参数函数的参数封装在类实例中
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 封装C++模板
- 将 RTOS 队列对象封装在仅具有静态分配的 IQueue 自定义接口中
- 从封装在对象中的函数 C++ 返回时为空的列表
- 当要访问的对象被多次封装时,如何正确使用setter
- 在为嵌套类定义行外友元时,我真的必须打破封装吗?
- 如何在类中封装C/C++套接字发送和接收函数?
- 如何使用吸气剂方法实现C++封装
- 封装 std::map 以允许迭代,但没有直接密钥访问?
- 类C++友元函数无法访问封装的类
- 当从成员类调用封装的std::begin时,程序崩溃
- 从私有成员类中断封装派生的模板类
- C++实用程序,用于将长开关语句转换为封装开关案例阶梯的简洁函数调用
- 如何修复列表视图中的错误?,封装控件时无法选择任何项
- 我们可以使用命名空间实现封装吗?
- 封装 std::vector 以允许迭代,但不允许其他内容
- lambda[=] 上的复制值被另一个封装的 lambda[&] 阻止
- 如何使用提升范围将自定义迭代器封装在函数中