baizy77 发表于 2018-9-13 18:19:29

C++老鸟日记020 嵌套结构,类的嵌套定义

本帖最后由 baizy77 于 2018-10-1 20:52 编辑

版权声明---------------------------------------------------------------------------------------------------------------------该文章原创于Qter开源社区(www.qter.org)作者: 女儿叫老白 (白振勇)转载请注明出处!---------------------------------------------------------------------------------------------------------------------课程目录:《C++老鸟日记》目录本套课程属于:《C++跨平台开发干货》系列课程。-----------------------------------------------------------------------------
引言:----------------------------------------------------------------------------       在进行类设计的时候,有些功能或接口可能集中属于某一个功能块,而且该部分接口只会在当前类中使用或者提供。这时候,我们就可以通过嵌套的结构或者嵌套类的设计来实现。
正文:----------------------------------------------------------------------------       嵌套类的设计一般用在紧密相关的两个类中。// item.h
       class CGraphItem {
       public:
    ……
    bool deSerializeBinary(QDataStream&ds);
       private:
    // 端子类,用于表示图元上的端子,该类不对外暴露。它提供的功能通过CGraphItem对外提供。CGraphItem仅提供外部所需的接口,其他接口对外隐藏。
    classCTerminal
    {
    public:
      booldeSerializeBinary(QDataStream& ds);
    };
private:
    CTerminal* m_pTerminal;
};
// item.cpp
bool CGraphItem::deSerializeBinary(QDataStream& ds)
{
    ……
    if (NULL != m_pTerminal)
      m_pTerminal->deSerializeBinary(ds);
    if (NULL != m_pTerminal)
      m_pTerminal->deSerializeBinary(ds);
    return true;
}

bool CGraphItem::CTerminal::deSerializeBinary(QDataStream&ds)
{
    ……
    return true;
}
       上述代码中,图元类CGraphItem需要提供图元封装功能,图元上有端子,而图元类只需要把需要对外提供的接口(比如序列化接口deSerializeBinary())暴露出来,而把CTerminal作为私有的类进行了封装。当然也可以把CTerminal类作为public嵌套。这样,外部就可以直接使用该类了。
结语:----------------------------------------------------------------------------       嵌套结构或嵌套类的设计在软件研发过程中不太常用,但是如果两个类具有密切关系并且独立性不强的话,可以考虑以嵌套的方式进行设计。

tan 发表于 2018-9-14 21:15:29

包含关系。
   如果我要定义一个对象。那么CGraphItemmember;
   那么member.m_pTerminal   这样就会报错。 会不会?   
这样就只能用CGraphItem   里面的成员函数做处理了?

baizy77 发表于 2018-9-14 22:28:28

tan 发表于 2018-9-14 21:15
包含关系。
   如果我要定义一个对象。那么CGraphItemmember;
   那么member.m_pTerminal   这样 ...

会报错。因为访问了私有成员变量。只能通过CGraphitem的接口处理。
页: [1]
查看完整版本: C++老鸟日记020 嵌套结构,类的嵌套定义