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

  • 相关阅读:
    java安装jdk时,执行javac出错
    servlet入门
    maven安装出错原因分析
    备份整个schema的数据
    备份db2schema数据
    UltraEdit使用技巧
    获取数据库分组后的最大值
    什么是jsp
    linux 上使用FTP传输文件
    关于opencv进行rtsp取流播放视频特别慢的问题记录
  • 原文地址:https://www.cnblogs.com/coding-my-life/p/3661607.html
Copyright © 2011-2022 走看看