OOP——让部分意识到它们的整体
OOP -- make parts aware of their whole
我有一个名为Session的单例类,看起来像:
class Session {
private:
Session() throw () {};
Session(const Session & copy) throw (); // Not implemented.
Session & operator= (const Session & copy) throw(); // Not implemented.
public:
static Session & getInstance() throw ()
{
static bmd2::Session instance;
return instance;
}
会话由数据集组成,数据集由文件组成(为简单起见,代码中未显示)。
我们通常的用途是让一个外部客户端,如下所示,通过调用getInstance()对会话API进行操作。
+--------------------------------------------+
| Session |
|--------------------------------------------| +--------------------------+
| Session::getInstance(); <------+-----------------------------+| Client |
| instance; | | |--------------------------|
| | | | |
| +------------------------------|-------+ | | |
| | Dataset | | | | |
| |------------------------------|-------| | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | +----------------------|-----+ | | +--------------------------+
| | | File | | | |
| | |----------------------|-----| | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | + | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | +----------------------------+ | |
| +--------------------------------------+ |
+--------------------------------------------+
我最近遇到了一个用例,我希望文件和数据集能够访问它们所在的会话实例,也如上面所示。
让File知道其父会话的最佳方法是什么?我的第一次尝试是在File.h中包含Session.h,但它似乎导致了循环依赖性问题(我在整个项目中都有未解决的符号)。我不知道为什么会这样——如果有人能根据提供的信息告诉我——我将非常感谢。不管怎样,我把#includeSession.h移到了File.cpp中,一切似乎都正常了。然而,从C++的角度来看,我仍然对这种情况感到模糊。在Java中,我会从所有组成的部分传递对整体的引用,因为这些部分是从整体构建的。
在C++中,解析器在解析文件时读取类名。如果它看到一个不知道的类名,就会抛出一个错误。这意味着,如果类A中引用了类B的对象(即使是在方法签名中),并且它还没有看到类B,它将抛出一个错误。因此,如果类A引用B,类B引用A,则存在循环依赖关系。解决方案是一个正向开发——在给出完整定义之前,可以声明一个类将存在。这满足了解析器,只要它最终被定义。
关于如何使用它们的Wiki参考http://en.wikipedia.org/wiki/Forward_declaration
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何将stdout重定向到stderr
- HEX值到wchar_t字符(UTF-8)的转换
- Qt VTK交互风格的信号到小部件
- Pybind11:将元组列表从Python传递到C++
- 使用strcpy将char数组的元素复制到另一个数组
- 在c++中使用nlohmann从类到json的转换
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 读取文件并输入到矢量中
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 从一个类访问私有字段到另一个与C++中的前一个类无关的私有字段 (OOP)
- 我意识到这是错误的,但我无法删除它
- 我想意识到一个接收STD ::相同参数的函数,然后称其为“如何”
- OOP——让部分意识到它们的整体
- 有没有办法意识到一个数字是否由于转换而被截断
- 在代码中使用 strcmp,编译>测试>失败,调试,意识到我忘记了 0==strcmp
- c++ - OOP实现链表,我不知道为什么添加到末尾不适合我,请建议
- 如何使编译器意识到模板结构
- 当一个对象改变某些值时要意识到