C++四大特性之封装
C++四大特性
C++作为面向对象编程语言,具备面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)的四大特性。抽象,封装,继承,多态。
所谓抽象,就是对具体事物的定义过程。而在编程语言中的理解就是在使用面向对象的方法设计一个软件系统时,首先就要区分出现实世界中的事物所述的类型,分析它们拥有哪些性质与功能,再将它们抽象为在计算机虚拟世界中才有意义的实体——类,在程序运行时,由类创建出对象,用对象之间的相互合作关系来模拟真实世界中事物的相互关联。(这些毫无意义)
关于抽象其实就是一种思想,我们不必过多的去考虑,因为这个思想将无时无刻不渗透与我们的代码编写中
实际上不只是抽象,封装,继承,多态也是一种哲学思想体现,人们尽可能利用自己的思维方式去认识世界。基于封装,继承,和多态三种思想去构造代码,去编写程序。封装,继承,多态可以说是形而上学的东西,但人们在这些形而上学的思想的指导下,有了对代码的相应操作,数据类型等可实操的行为。所以面向对象有时候也称三大特性,因为这三大特性可实操。
封装
封装是一种思想,字面上理解就是就把什么东西装在一起并封起来,那么封起来的是什么呢?有什么好处呢?举个栗子,过度包装的月饼(完全不透色)。这是将月饼封装起来,你只能透过封皮去了解它,加工人员只允许你通过表皮去了解它,这样就避免了你看到它内部的可能,让你看到他想让你看到的,而这样做的好处不必多说了吧。
而在编程方面理解封装就是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这 个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护 的接口访问其他对象。
由于我们的代码不是月饼,所以不必把它是否新鲜藏起来。我们所需要封装的是它的各种数据和我们对各种数据的操作。
而要讲对于封装的实际操作就又免不了抽象这个概念,我这里的抽象专指类与对象。类与对象是一个相对应的名词。类是对象的集合,对象是类的个体。举个栗子:你将你们班身高一米八以上的男生分为一类人(高个),这就是一个类,特性是高于一米八,而里面的一个人就一个对象。再举个栗子,你将你们班踢足球的男生分为一类,这就是另一个类。然后将高于一米八且会踢足球的划分为第三类,这便又是一类。然后我们看一下分类标准。身高,踢足球。然后我们发现身高这个标准和踢足球是不一样的,一个是人们的固有属性,一个是人们的运动。而在编程中就是静态成员和对数据成员操作的函数(动态)。
然后我们来说一下封装的实现。无论封装还是继承或多态都是在对类和对象进行操作。C++中的关键字class可以来定义函数,其中又有三种封装方式。Private,public和protected(与继承有关,后期再说)。做个总结:可以简单认为类与对象(C++中的class)就是抽象的体现,继承,封装和多态就是在类(class)的基础得以实现的。
封装的实现依赖于public和private
最新文章
- Android SQLite调试
- 利用python实现爬虫爬取某招聘网站,北京地区岗位名称包含某关键字的所有岗位平均月薪
- (笔记)angular 事件传递获取当前
- 全面理解BFC
- bzoj 3529 [Sdoi2014]数表(莫比乌斯反演+BIT)
- yii_CGridView_ajax_pagination_and_ajax_sort
- 用mysql dump 导入与导出的方法
- iOS基础 - 核心动画
- 【jsp】读取WebRoot下的图像文件
- PRINCE2的国际形势?光环国际项目管理培训
- flask 文件转为pdf并添加二维码
- Vue 结合 Axios 接口超时统一处理
- error: control may reach end of non-void function [-Werror,-Wreturn-type]
- Javascript高级调试——console.table()
- 菜刀连接webshell
- yii page title, CMenu 中文不显示
- 安卓测试之---Monkey
- 改变VO中的sql
- jquery 获取某a标签的href地址 实现页面加载时跳转
- SPOJ 10628. SPOJ COT Count on a tree 可持久化线段树
热门文章
- AsyncAPI 几个方便的工具
- Cortex Architecture
- Reactive Extensions (Rx) 入门(2) —— 安装 Reactive Extensions
- 52: Luogu 4777 excrt
- BZOJ 1801: [Ahoi2009]中国象棋
- P3386 【模板】二分图匹配(匈牙利算法)
- linux命令之------Mv命令
- Spring Boot 怎么打一个可执行 Jar 包?
- 第08组 Beta冲刺(4/4)
- postgre查询一段时间内的数据