• [Effective C++ --023]宁以non-member、non-friend替换member函数


    作者在这一节中花了大幅度的篇幅来介绍为什么最好使用non-member、non-friend函数。

    思路如下:

    场景:如果有一个class用来表示网页浏览器,那么清楚缓存及历史记录的时候,我们可能定义下面的类:

    class Web {
    public:
        void clearCache();
        void clearCookies();
        void clearHistory();
    }

    但是也有可能用户需要一下子全部清除这些信息,于是我们再定义下面这个成员函数:

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

    当然,我们可以使用一个non-member函数来完成这个操作:

    void clear (Web& wb) {
        wb.clearCache();
        wb.clearCookies();
        wb.clearHistory();
    }

    根据面向对象守则要求,数据以及操作数组的那些函数应该被捆绑在一块。虽然这么说,但是针对clear操作而言,non-member函数clear()具有更大的封装性。

    因此,我们推荐使用non-member函数。

    而在实际操作中,在class拥有很多操作函数的时候,我们经常是将class成为一个non-member函数并且位于web所在的同一个namespace内。比如:

     1 // 头文件“web.h”
     2 namespace Web{
     3 class Web{};
     4 .... // 放入核心机能,例如几乎客户需要的所有non-member函数
     5 
     6 }
     7 
     8 // 头文件“webbrowser.h”
     9 namespace Web{
    10 class Web{};
    11 .... // 与浏览器标签相关的函数
    12 
    13 }
    14 
    15 // 头文件“webcookies.h”
    16 namespace Web{
    17 class Web{};
    18 .... // 与Cookies相关的函数
    19 
    20 }

    上述正式C++标准程序库的组织方式。

    ◆总结

    宁以non-member、non-friend替换member函数。这样做可以增加封装性、包裹弹性和机能扩充性。

  • 相关阅读:
    知识体系总结
    计算机基础总结
    Redis总结
    Mysql总结
    JAVA基础总结
    有锁编程
    CAS
    读写自旋锁
    org.apache.log4j.Logger详解
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
  • 原文地址:https://www.cnblogs.com/hustcser/p/4171588.html
Copyright © 2020-2023  润新知