今天在逛CSDN的时候,看到一个帖子http://bbs.csdn.net/topics/390750400,说什么继承被打压,组合比继承优秀,瞬间吓尿了......不是被lz说的话吓的,而是我写了几年程序,居然没听说过组合。难道是我孤陋寡闻,跟不上时代了。赶紧百度了一下。

    看了http://socket.blog.163.com/blog/static/20987300420099238350634/这位博主的解说,我松了一口气。组合不就是一个成员变量么,什么时候有了"组合"这么高上大的名字。

    不过既然来了,那我也多说两句。看下面的代码,这就是组合了,

#include <iostream>
using namespace std;

class base
{
    public:
        void show();
};

class test
{
    private:
        base _base;
};

int main(int argc,char *argv[])
{
    test _test;
}

而下面的就是继承了:

#include <iostream>
using namespace std;

class base
{
    public:
        void show();
};

class test : public base
{
};

int main(int argc,char *argv[])
{
    test _test;
}

如果要调用基类的show函数,用继承则比较方便。组合则需要在test类再写一个函数调用。但继承也不见得就比组合适用。之前在项目中遇到过这么一种情况。一个玩家对象类USER,继承了一个NET类(用于向客户端发送数据,已封装为底层,不可修改),这本来也挻合适。可是到后来处理抢号登录时,即同样的号把另一台设备顶掉。最好的办法就是把USER里的socket断掉,然后把新登录的socket连接到USER对象上就OK了。然而由于是继承NET类的,没法把新登录的socket连接到USER对象。如果改为组合,则解决了问题。
    所以所谓用哪个更好,还得根据业务需求来确定。

posted on 2014-04-12 23:41  coding my life  阅读(222)  评论(0编辑  收藏  举报