博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
访问控制 - C++快速入门18
阅读量:5846 次
发布时间:2019-06-18

本文共 1506 字,大约阅读时间需要 5 分钟。

访问控制

 

让编程改变世界

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()  

我们需要认识到

  一定要记住使用这些访问级别!即时只有你一个人在开发某个项目,全部记住各个类的调用方法也是一件困难的事情。 给每个方法和属性加上 protected 或 private 访问级别,就由编译器替你记住那些禁令并在你违反的时候发出警报。   使用访问级别对身为程序员的你只有好处,没有坏处!再优秀的程序员也需要这种机械的保护! 使用 private 的好处是,今后可以只修改某个类的内部实现,而不必重新修改整个程序。这是因为其他代码根本就访问不到 private 保护的内容,所以不怕”牵一发而动全身”的惨剧发生!   在同一个类定义里可以使用多个 public:, private: 和 protected: 语句,但最好把你的元素集中到一个地方,这样代码的可读性会好很多。 在编写你的类定义代码时,应该从 public: 开始写起,然后是 protected:, 最后是 private:。 虽然编译器并不挑剔这些顺序,但这么做的好处是 —— 当你想知道某个特定的类提供了哪些方法和属性时,好的顺序可以为你节省大量的时间!  

课后想一想:

class Pig : public Animal { … } 是什么意思?! [buy]   [/buy] [Downlink href='http://urlxf.qq.com/?JrYz22q']视频下载[/Downlink] [Downlink href='http://kuai.xunlei.com/d/LCDPQSZKQGOL']备胎下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2012/03/17/3847163.html

你可能感兴趣的文章
js控制图片等比例缩放
查看>>
Openstack API常用命令
查看>>
关于k-means聚类算法的matlab实现
查看>>
跟随我在oracle学习php(8)
查看>>
UVA-10212 The Last Non-zero Digit. 分解质因子+容斥定理
查看>>
Kotlin的语法糖(一)基础篇
查看>>
亚信安全参加第六届全国等保技术大会 态势感知助力“等保2.0”落地
查看>>
大数据公司Palantir融得7亿美元 曾追踪拉登
查看>>
建立备份策略的重要性
查看>>
发力IoT领域 Marvell注重生态系统发展
查看>>
你应该知道的 RPC 原理
查看>>
Ubuntu安装词典
查看>>
Spring解析
查看>>
python中str和repr区别
查看>>
数据挖掘-同比与环比
查看>>
RedHat6 管理应用服务【11】
查看>>
stm32F10x复习-1
查看>>
[转] vue异步处理错误
查看>>
CSS 3D动画概述菜鸟级解读之一
查看>>
kindeditor.net应用
查看>>