Effective C++ 读书笔记 条款23:宁以non-member、non-friend 替换 member 函数

Core List

1. 相同行为的 member 和 non-member 实现

class WebBrowser {

public:

    void clearEverything();    //  member 函数

}

void clearBrowser( WebBrowser& wb) {    //  non-member, non-friend 函数

    wb.clearCache();

    wb.clearHistory();

    wb.removeCookies();

}


2. non-member、non-friend 优于 member 的原因

(1) 封装性好

在两个函数提供相同机能的情况下,non-member、non-friend 函数不能访问 class 的 private 成员,相对于 member 函数有较高的封装性。

(2) 包裹弹性

non-member、no-friend 函数可以对 class 的任意函数进行打包,实现不同的功能,且独立于不同的头文件中。

由于 namespace 可以跨越多个源码文件而 class 不同,因此相关的机能可以声明在同一个头文件,每个头文件负责部分机能。

class 必须定义整体,不能被分割为片段,如果 class 的一个成员函数需要被使用,则整个 class 需要被编译包含进来。

(3) 机能扩充性

class 的定义对于客户而言是不可扩展的,但是 non-member、no-friend 函数可以被放在多个头文件内,但隶属于同一个命名空间,可以轻松扩展。

注:虽然我们可以通过派生类来扩展基类,但是我们也无法访问在基类中被封装的成员(private),且很多类被非设计用作基类。


结论:宁以non-member、non-friend 替换 member 函数做的目的是增加 “封装性”、“包裹弹性” 和 “机能扩展性”。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值