访问控制

让编程改变世界

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/3846184.html

访问控制 - C++快速入门18相关推荐

  1. POI3.5 HSSFXSSF Excel 操作快速入门

    POI3.5 HSSF&XSSF Excel  操作快速入门 1 本文翻译自 http://poi.apache.org/spreadsheet/quick-guide.html 欢迎交流指正 ...

  2. QT快速入门、三点求圆心实现详解

    在编程中,会经常用到数学计算,所以C++将常用的数学计算,例如求正余弦等,封装成函数(正是我们在3.2 数学计算中学习到的),我们只需要写入简单的语句就可以执行所需要的功能,这正是函数的意义.在这一章 ...

  3. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  4. Kubernetes CKA认证运维工程师笔记-Docker快速入门

    Kubernetes CKA认证运维工程师笔记-Docker快速入门 1. Docker 概念与安装 1.1 Docker 是什么 1.2 Docker 基本组成 1.3 版本与支持平台 1.4 Do ...

  5. Docker快速入门,看这个就够了

    Docker快速入门 一.Docker介绍 1.1 Docker背景 1.2 Docker概念 1.3 Docker的优势 1.4 Docker的三个基本概念 二.Docker的安装和使用 2.1 安 ...

  6. notes-Java学习指南①(快速入门)(网易云课堂)

    Java学习指南①(快速入门)(网易云课堂) 讲师:邵发(阿发你好) 章节1:第1章 Hello,World 课时1关于本篇11:55 编程语言的演化 机器码-汇编语言-C语言-C++ -java/C ...

  7. 最新《小甲鱼C++编程快速入门教程》

    这套教程一共40讲,内容真心不错,其实大家看看目录也就能得出结论了  ===============课程目录=============== <鱼C论坛小甲鱼C++编程快速入门培训系列教程> ...

  8. Lua+OpenResty快速入门

    Lua+OpenResty快速入门 Lua 概念 特性 应用场景 Lua的安装 Lua的语法 第一个Lua程序 Lua的注释 标识符 关键字 运算符 全局变量&局部变量 Lua数据类型 nil ...

  9. 【安全利器SELinux快速入门系列 | 01】SELinux基础入门

    这是机器未来的第35篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/125914553 文章目录 1. 研究目标 2. se ...

最新文章

  1. Centos7安装编译安装zabbix2.219及mariadb-5.5.46
  2. linux的source命令,linux命令之Source命令
  3. 计算机网络数据分析报告,贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式...
  4. ubuntu 修改或创建交换分区的大小
  5. MATLAB环境认识实验报告,matlab实验报告ljg
  6. 京东前端:PhantomJS 和NodeJS在网站前端监控平台的最佳实践
  7. sql注入修复方法是_旧的方法是修复我们可以看到的内容。
  8. java对象头_我的并发编程(二):java对象头以及synchronized升级过程
  9. Linux 服务器远程控制三剑客Telnet、SSH 和 VNC 之 VNC
  10. java随机抽样算法_随机抽样一致性(RANSAC)算法详解
  11. 评分 9.7!这本 Python 书彻底玩大了?程序员:满分!
  12. 如何更好的组织你的Laravel模型 1
  13. Linux 进程间通信 --- 信号通信 --- signal --- signal(SIGINT, my_func); --- 按键驱动异步通知(转)...
  14. 各种标点符号的英文翻译
  15. nodepad++快捷键收集
  16. UVa 10048 (Floyd变形) Audiophobia
  17. 解决 sql server 2005 2000 导出 script 脚本 附近有语法错误
  18. bzoj 1119 [POI2009] SLO bzoj 1697 牛排序 —— 置换+贪心
  19. 【Android】Android签名:pem和pk8转化为keystore,jks
  20. 前端工程师的第一个Flutter应用

热门文章

  1. python怎么样才算入门编程-新手如何入门Python编程
  2. python经典好书-新手Python入门经典书籍推荐
  3. python程序员招聘信息-为什么企业很难招聘到好的python程序员?
  4. 我在学python-你们以为我在学C++?其实我在学Python!人生苦短!
  5. 学python需要什么基础知识-学Python需要什么基础知识?零基础可以学Python吗?
  6. python学精通要多久-精通python需要多久
  7. python官网下载步骤2019-2019年python入门到精通(19天全)
  8. python3入门教程-Python3 入门教程 简单但比较不错
  9. python3爬虫实例-python3.7简单的爬虫实例详解
  10. python可以做什么系统-python能做哪方面的工作