访问控制
让编程改变世界
Change the world by program
访问控制
在此前的例子里,我们无论是Animal, Pig 和 Turtle 类的所有成员都是用 public: 语句声明。 所谓访问控制,就是C++ 提供了一种用来保护类里的方法和属性的手段。 这里所说的保护意思是对谁可以调用某个方法和访问某个属性加上一个限制。如果某个对象试图调用一个它无权访问的函数,编译器将报错。我们看下C++中的访问级别:
[caption id="attachment_475" align="aligncenter" width="300"] C++中的访问级别[/caption] 利用访问级别来保护类里的方法和属性很简单,只要在类里的某个地方写出一个访问级别并在其后加上一个冒号。 从那个地方开始往后的所有方法和属性都将受到相应的保护,直到遇到下一个访问级别或者到达这个类的末尾为止! class Animal { public:std::string name;
Animal(std::string theName);
void eat();
void sleep();
void drool();
}; 请看 name 属性的访问级别是 public,这就意味着任何代码都可以改变它的值。 事实我们今后就完全通过 pig.name = “小甲鱼” 来任意改名字了。 我们发觉,如没有任何限制,猪的名字一下子就可以改掉了。 这种隐患对这个简单的小程序来说可能没什么大不了的,但如果是发生在一个大型的程序里就足以引发一个逻辑漏洞。 注:BUG无法避免的原因正是因为我们无法模拟各种情况的的输入和修改带来的影响。 就像我们不能随便改变一个人的身份证的名字一样,Animal 类里的 name 属性应该受到保护。 尝试一下:test2()