Effctive C++ 改善程序与设计的55个具体做法 (第三版) 学习笔记(五)

人生美好

继续接上一篇:https://blog.csdn.net/weixin_37997214/article/details/106674201

条款23:宁以non-member、non-friend替换member函数

考虑一个类,该类有一个public函数,如果这个函数又调用了该类的private函数,那么,我们用private封装的类的封装性就被“破坏了”(实际上我们总用这种模式,这里应该考虑设计一下这个类了,肯定是这个类多少有点问题)

众所周知,一个类的public函数越少,那么这个类的封装性就越好,那么如果我们有这种调用成员函数的需求时,可采用另一种方式。

参考如下代码

class A
{
   public:
        const int AddFunA(const int a,const int b)
        {
           return PAddFunsA(a,b);
        }
   private:
        const int PAddFunsA(const int a,const int b)
        {
           reutn a+b;
        }
}

(当然程序在此处是多此一举),但是我们可以看到,其他用户调用AddFunA,越多的用户调用这个函数,就有越多的类受这个类影响。一旦这里我们想要更改,将AddFunA改为AddFunsA,则会有大量的用户需要被修改。所以我们最好的方式是不提供这个public函数。

namespace ASpace
{
    class A;
    const int AddFuns(const int a, const int b)
    {
        return A::AddFunA(a,b);
    }
}

上述这种形式就是解决这种问题的途径。细品一下,这种的好处就是如果ClassA内容为基础内容的时候,可以通过这种函数来拼接成各种函数,在不改变该类的情况下,完美的实现一些功能。但是这个例子可能举得不恰当,我寻思半天也没寻思出来这有啥用。

条款24:若所有参数皆需要类型转换,请为此采用non-member函数

如果你需要为某个函数的所有参数(包括被this指针所指的那个隐喻参数)进行类型转换,那么这个函数必须是个non-member。

PS:这一条基本没用到过,感觉这之后看着有些吃力。

条款25:考虑写一个不抛出异常的swap函数。

与模板相关,暂不考虑。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值