在C++工程中,往往会有很多类的存在,为了避免类之间的相互影响。应该让类仅仅public一些必须让外界访问的成员,而隐藏private一些不想要公开的成员内容。这种信息的隐藏,就叫做C++类的封装。
封装的目的是为了保护私有成员变量
C++对C的最根本的改变就是把函数放进了结构之中,也就是我们常说的C++的类。C++的类是个很牛的功能,它可以把变量和函数捆绑在一起,其中变量就叫做成员变量,函数就叫做成员函数。同时C++提供了三个关键字来区分这些成员的访问权限:public、private、protected用于声明哪些变量和函数是可以公开访问的、私有的、受保护的,这也就达到了信息隐藏的目的。即让类仅仅公开必须让外界知道的内容,而隐藏其他一切内容。
我们总是知道public是公开的,private是私有的,protected是受保护的。但具体更加细节的访问权限我们应该需要知道。
class Person{ public: int name;//比如说名字是可以公开访问的,外部可以随便访问,就放在public下 private: int money;//比如说钱是受保护的,只有自己的类和继承者的类可以使用 protected: char password;//比如说密码是要保密的,只有在自己这个类里才能访问 };
class创建类,如果成员变量为public类型,则外部可以随意赋值,无法保证程序的安全性。所以,将成员变量封装起来,外部就不是随便访问了,如果访问的话需要一些条件才能访问。通过提供公共的getter和setter给外界去访问私有的成员变量。
class Person { //public: // int m_age;//外部可以随意访问,所以赋值,赋什么值,m_age就是什么值 private: int m_age;//将其私有化,外部不可以直接访问,但可以通过setter和getter方法访问,下面要定义 public: void setterAge(int age)//这就叫封装里的setter方法 { if (age < 0)return;//对不想要随意乱赋值的变量进行过滤保护,比如:年龄必须大于0之类的 m_age = age;//通过public成员函数访问private成员变量 } int getterAge()//这就叫封装里的getter方法 { return m_age;//将setter方法赋的值,用getter方法返回,以供访问使用 } };
我们要知道类内,public的成员函数是可以访问private的成员变量的,而且是可以对其进行赋值的。但仅限于类内,所以setter和getter方法才可以访问private里的成员变量
int main() { Person person; //person.m_age = -4;//举个例子,外部随便赋值age为-4,其实年龄不能是负数,所以这样的变量就不安全,我们要把它封装起来 person.setterAge(4); int age = person.getterAge(); cout << age << endl;//4 getchar(); return 0; }
然后,我们在类外(例如main函数)就可以通过setter方法访问并赋值类内的私有变量,同时采用getter方法返回被访问的私有变量。这一过程其实就是间接的访问私有成员,这就叫做类的封装。