面向对象编程中封装的重要性"/>
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源码中都是采用的这种模式进行书写的,我一开始还以为是为了极端的代码复用,现在才知道,都是为了提高封装性!
更多推荐
c++面向对象编程中封装的重要性
发布评论