本帖最后由 baizy77 于 2018-10-1 20:52 编辑
版权声明 --------------------------------------------------------------------------------------------------------------------- 作者: 女儿叫老白 (白振勇) 转载请注明出处! --------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------
引言: ---------------------------------------------------------------------------- 在进行类设计的时候,有些功能或接口可能集中属于某一个功能块,而且该部分接口只会在当前类中使用或者提供。这时候,我们就可以通过嵌套的结构或者嵌套类的设计来实现。
正文: ---------------------------------------------------------------------------- 嵌套类的设计一般用在紧密相关的两个类中。 - // item.h
- class CGraphItem {
- public:
- ……
- bool deSerializeBinary(QDataStream&ds);
- private:
- // 端子类,用于表示图元上的端子,该类不对外暴露。它提供的功能通过CGraphItem对外提供。CGraphItem仅提供外部所需的接口,其他接口对外隐藏。
- classCTerminal
- {
- public:
- booldeSerializeBinary(QDataStream& ds);
- };
- private:
- CTerminal* m_pTerminal[2];
- };
复制代码
- // item.cpp
- bool CGraphItem::deSerializeBinary(QDataStream& ds)
- {
- ……
- if (NULL != m_pTerminal[0])
- m_pTerminal[0]->deSerializeBinary(ds);
- if (NULL != m_pTerminal[1])
- m_pTerminal[1]->deSerializeBinary(ds);
- return true;
- }
- bool CGraphItem::CTerminal::deSerializeBinary(QDataStream&ds)
- {
- ……
- return true;
- }
复制代码
上述代码中,图元类CGraphItem需要提供图元封装功能,图元上有端子,而图元类只需要把需要对外提供的接口(比如序列化接口deSerializeBinary())暴露出来,而把CTerminal作为私有的类进行了封装。当然也可以把CTerminal类作为public嵌套。这样,外部就可以直接使用该类了。
结语: ---------------------------------------------------------------------------- 嵌套结构或嵌套类的设计在软件研发过程中不太常用,但是如果两个类具有密切关系并且独立性不强的话,可以考虑以嵌套的方式进行设计。
|