zoukankan      html  css  js  c++  java
  • 组合与继承

        今天在逛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对象。如果改为组合,则解决了问题。
        所以所谓用哪个更好,还得根据业务需求来确定。

  • 相关阅读:
    c# 设计模式(一) 工厂模式
    微信开发
    一款非常好用的 Windows 服务开发框架,开源项目Topshelf
    基础语法
    C++环境设置
    c++简介
    使用查询分析器和SQLCMD分别登录远程的SQL2005的1434端口
    ps-如何去水印
    html/css/js-横向滚动条的实现
    java中如何给控件设置颜色
  • 原文地址:https://www.cnblogs.com/coding-my-life/p/3661607.html
Copyright © 2011-2022 走看看