美文网首页Exceptional C++
【Exceptional C++(11)】Classes之间的关

【Exceptional C++(11)】Classes之间的关

作者: downdemo | 来源:发表于2018-01-29 14:11 被阅读3次

    问题

    • 一个网络程序有两种通信行为,每种行为有自己的协议规定,两个规定之间有一些相似之处,某程序员设计如下,将共同运算和信息封装在BasicProtocal class中
    class BasicProtocal {
    public:
        BasicProtocal();
        virtual ~BasicProtocal();
        bool BasicMsgA(...);
        bool BasicMsgB(...);
        bool BasicMsgC(...);
    };
    class Protocal1 : public BasicProtocal {
    public:
        Protocal1();
        ~Protocal1();
        bool DoMsg1(...);
        bool DoMsg2(...);
        bool DoMsg3(...);
        bool DoMsg4(...);
    };
    class Protocal2 : public BasicProtocal {
    public:
        Protocal2();
        ~Protocal2();
        bool DoMsg1(...);
        bool DoMsg2(...);
        bool DoMsg3(...);
        bool DoMsg4(...);
        bool DoMsg5(...);
    };
    
    • 每个DoMsg...()都调用BasicProtocal::Basic...()执行共同工作,然后再执行实际传送工作。此设计有需要改进的地方吗?

    解答

    • 这是一个十分常见的OO class关系上错误设计,这是一个很明显的is implemented in terms of关系,这种关系应该使用private继承或membership实现。但是希望塑模is implemented in terms of关系时,选择membership/aggregation而不要用private继承,除非需要存取protected成员或重写虚函数

    相关文章

      网友评论

        本文标题:【Exceptional C++(11)】Classes之间的关

        本文链接:https://www.haomeiwen.com/subject/mluxzxtx.html