C++面向对象特点一:封装性
在使用字符串类的时候,我们发现它和字符数组一个很明显的不同就是,我们无法对数据进行直接的修改和操作。如果有一个char a[]="Hello";,那么我们可以直接用a[0]= 'h';来修改存储在内存中的字符,甚至我们可以输出数组的首地址来了解这个数组到底存放在什么位置。而对于一个string a("Hello");,我们却无法直接修改它的数据,因为所有对a的操作都是由成员函数所定义的。我们只能了解这个字符串的存在,但它具体存储在于内存的什么位置,我们无法通过除了对应操作以外的简单方法得知。(如使用取地址操作符)
由于我们不是字符串类的设计者,当我们对string进行种种操作时,我们只能了解到它的操作结果,而对它的操作原理和操作实现过程却无法得知。
我们把类的数据不可知性和操作实现过程不可知性称为类的封装性(Encapsulation)。
不难理解,作为使用者,我们不需要对数据和操作实现过程感兴趣。就好像买一个手机,我们只关心它是否能够正常通话,正常发短消息,却对它如何接通电话,如何把信号发送出去等等不感兴趣。类的封装性把类的设计者和类的使用者分隔开,使他们在设计程序时互不干扰,责任明确。