zoukankan      html  css  js  c++  java
  • 条款23:宁以non-member, non-friend,替换member函数。

    考虑下面这种经常出现的使用方式:

    class webBroswer{
    public:
        ...
        void clearCache();
        void clearHistory();
        void removeCookies();
        ...
    };

    那么很自然的就会想到增加这么一种清理方式:

    class WebBrowser{
    public:
        ...
        void clearEverything();
    };

    或者是这么一种清理方式:

    void clearBrowser(WebBrowser & wb)
    {
        wb.clearCache();
        wb.clearHistory();
        wb.clearCookie();
    }
    如果要在功能相同的一个member function和一个non-member, non-friend function之间选的话,那么具有较高的封装性的是non-member, non-friend function.
    (注意这里的在意封装性,让一个function成为一个class的non-member),不影响其成为另一个class的member函数,例如上面的clearBrowser函数来说,其完全可以作为某个工具类的static member函数)
    一般的好的做法是让,clearBrowser放置在与clss WebBrowser相同的一个namespace里面。像下面这样:
    namespace WebBrowserStuff{
        class WebBrowser{...};
        void clearBrowser(WebBrowser & wb);//类似clearBrowser这类的便利函数可以在一个namespace里面声明多个。
    };
    而且由于namespace可以跨头文件存在,这样也方便这类的工具函数进行跨头文件的维护。
     
    小结:
        记住应该用non-member non-friend函数替换member函数,这样做可以增加封装性,包裹弹性以及机能扩充性质。
  • 相关阅读:
    js == 和 === 判断原理
    react 渲染原理
    常见的HTTP状态码
    类数组和数组的区别是什么?
    如何判断一个变量是不是数组?
    typeof 是否正确判断类型? instanceof呢? instanceof 的实现原理是什么?
    前端 js data数组转tree数据结构
    Echarts 基础学习
    Vue CLI 4.0 项目搭建
    Echarts Demo
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4859716.html
Copyright © 2011-2022 走看看