c++面向对象编程中封装的重要性

C++中有个不成文的规定(其实在c++effective中已经成文),就是要将成员变量声明为private,这样做的好处有三点:
1.提高语法的一致性,客户在访问class成员的时候不需要思考是否要带括号,统一带括号访问,节省思考时间。
2.提升class对成员变量的访问控制精度,如果你的成员变量声明为public,这样所有的用户都能访问到它,但如果你声明为private,你就可以通过实现成员函数,来实现对这些成员变量的读写控制,如只读,或可读可写。
3.提升class的封装性,这一点是最重要的,也是本文重点讨论的内容。

封装性对于一个class的设计有多重要,假设我们有一个public变量成员,而我们最终取消了它,多少代码可能会被破坏呢?所有使用它的客户码都会被破坏,那将是一个不可知的大量。因此public成员函数完全没有封装性。同理,对于protected成员变量,封装性也几乎等于0,这些成员变量面临着大量被改变的机会,而一旦被改变,就意味着太多代码需要重新编写、重新测试、重新编写文档、重新编译,这对程序员是非人道的沉重负担,因此,我们在实现自己的class的时候,一定要将成员变量声明为private。而且不仅如此,在设计成员函数的时候,直接接触这些变量的函数数量越少越好,如果其他成员函数需要访问这些成员变量,最好通过调用定义好的成员函数来间接访问,比如:

class person{
private:
    int age;
public:
    int getAge(){
        return adge;
    }
    bool isAdult(){
        return getAge()>=18;
    }
}

这就是个生动的例子,在判断是否成年的时候,不是直接调用age,而是调用直接访问age的函数getAge,尽量减少直接访问private成员变量的函数,就最大限度的降低了因为客户误修改成员变量的机会,以避免不必要的错误。
by the way,STL源码中都是采用的这种模式进行书写的,我一开始还以为是为了极端的代码复用,现在才知道,都是为了提高封装性!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值