C专家编程 第11章 你懂得C,所以C++不再话下 11.1 初识OOP
C++之于C,就像Algol-68之于Algol ---David L.Jones
如果你觉得C++还不够复杂,那你知道protected abstract virtual base pure virtual private
destructor是什么意思吗?你上次用到它又是什么时候呢?---Tom Cargill,C++ Journal,1990年秋
11.1初始OOP
从实用的角度讲,C++是ANSI C的一个超集,他基本上兼容ANSI C。不过C语言的有些特性在C++中并不支持。但是,要想从C++获益,或甚至完全理解它,必须理解一些基础概念。使用C++编程时“object-oriented paradigm”(面向对象编程模型)和“转换思维”的意思。我去掉了C++中的一些神秘之处,尽量用平实的语言来描述C++,把它与你所熟悉的C语言特性联系起来,帮助你尽快入门。
这有点类似于窗口编程模型。有时我们需要从窗口系统的角度学习改写自己的程序,此时的控制逻辑就要转变成主窗口循环处理。面向对象编程(OOP)也差不多,但它从改写数据类型的角度对程序进行读写。
面向对象编程把对象的使用作为程序设计的中心主题。软件对象的定义有很多种,其中绝大部分定义都同意面向对象的关键就是把一些数据进行操作的代码组合在一起,共用某种时髦手法将它们做成一个单元。许多编程语言把这种类型的单元称为class(类)。
面向对象编程的特点是继承和动态绑定。C++通过类的派生支持继承,通过虚拟函数支持动态绑定。虚拟函数提供了一种封装类体系实现细节的方法。
这里,我们将调用函数来进行这个操作,把焦点集中于抽象概念而不是底层实现细节中。
术语 | 定义 |
抽象(abstraction) | 它是一个去除对象中不重要的细节的过程。只有那些描述了对象的本质特征的关键点才被保留。抽象是一种设计活动,其他的概念都是提供抽象的OOP特性 |
类(class) | 类是一种用户自定义类型,就好像int这样的内置类型一样。内置类型已经有了一套针对它的完善操作(如算术运算等),类机制也必须允许程序员规定他所定义的类能够进行的操作。类里面的任何东西被称为类的成员。 |
对象(object) | 某个类的一个特定变量,就像j可能是int类型的一个变量一样。对象也可以被称作类的实例。 |
封装(encapsulation) | 把类型、数据和函数结合在一起,组成一个类。在C语言中,头文件就是非常脆弱的封装实例。它之所以是一个微不足道的例子。是因为它的组合是纯词法上的,编译器并不知道头文件是一个语义单位 |
继承(inheritance) | 这是一个很大的概念---允许类从一个更简单的基类中接收数据结构和函数。派生类获得基类的数据和操作,并可以根据需要对它们进行改写,也可以在派生类中增加新的数据和函数成员。在C语言中不存在继承的概念,没有任何内容可以模拟这个特性。 |
现在C++是一个相当庞大的语言。
C专家编程 第11章 你懂得C,所以C++不再话下 11.1 初识OOP相关推荐
- C专家编程 第11章 你懂得C,所以C++不再话下 11.13 多态---运行时绑定
多态---运行时绑定 多态(polymorphism)源于希腊语,意思是"多种形状".在C++中,它的意思是支持相关的对象具有不同的成员函数(但原型相同),并允许对象与适当 ...
- C专家编程 第11章 你懂得C,所以C++不再话下 11.16 新奇玩意儿---多态
新奇玩意儿---多态 它可使派生类的成员函数优先于基类的同名函数获得调用,但如果派生类对虚拟函数未曾定制,也可以调用基类的成员函数.有时候,成员函数在编译时并不知道它是作用于本类的对象还是派生 ...
- 《C专家编程》第二章——这不是Bug,而是语言特性
无论一门语言有多么流行或多么优秀,它总是存在一些问题,C语言也不例外.本章讨论的重点是C语言本身存在的问题,作者煞费苦心的用一个太空任务和软件的故事开头,也用另一个太空任务和软件的故事结尾,引人入胜. ...
- C专家编程 第6章 运动的诗章:运行时数据结构 6.1 a.out及其传说
运动的诗章:运行时数据结构 编程语言理论的经典对立之一就是代码和数据的区别.有些语言(如Lisp)把二者视为一体.其他语言(如C语言)通常维持两者的区别.Internet蠕虫非常难以被人们所 ...
- 《C专家编程》1-2章阅读收获
一. C诡异离奇,缺陷重重,却获得了巨大的成功. ·编译器设计:效率(几乎)就是一切.编译器的效率包括两个方面:运行效率(代码的运行速度)和编译效率(产生可执行代码的速度). 除了开发和学习环境外,运 ...
- C专家编程 第10章 再论指针 10.7 使用指针创建和使用动态数组
使用指针创建和使用动态数组 当预先并不知道数据的长度时,可以使用动态数组.绝大多数具有数组的编程语言都能够在运行时设置数组的长度.它们允许程序员计算需要处理的元素的数目,然后创建一个刚好能容纳 ...
- C专家编程 第1章 C:穿越时空的迷雾 1.4 KR C
时间:1978 人物:Steve Johnson 事件:编写了pcc这个可移植的C编译器 影响:形成了一代C编译器的基础. C语言的演化之路如图1-2所示. 1973-3(早期的C)--->19 ...
- C专家编程 第8章 为什么程序员无法分清万圣节和圣诞节 8.2 根据位模式构筑图形
根据位模式构筑图形 图标(icon)或者图形(glyph)是一种小型的位模式映射于屏幕后产生的图像.一个位表示图像上的一个像素.如果一个位被设置,那么它所代表的像素就是"亮" ...
- C专家编程 第6章 运动的诗章:运行时数据结构 6.3 操作系统在a.out文件里干了些什么
操作系统在a.out文件里干了些什么 为什么a.out要以段的形式组织.段可以方便地映射到链接器在运行时可以直接载入的对象中!载入器只是取文件中的每个段的映像,并直接将它们放入到内存中.从本 ...
最新文章
- MySQL笔记11:C语言编程API函数和完整实例演示!
- 第二章 Linux系统安装 - VMware虚拟机安装、卸载与使用
- mac 通过 homebrew 安装mongodb
- python3 random模块_Python3 中 random模块
- MFC中onmouseover与onmousemove的区别
- 【学生网页设计作业源码】基于HTML+CSS+JavaScript简单的大学生书店(13个页面) 二手书店电子商务网站模板源码
- html 字体思源_网页使用思源字体 CSS
- 计算机麦克风测试,如何进行电脑话筒测试?电脑麦克风如何设置?
- 音:Android音频系统之音频框架
- 3 整型变量,实型数据(主要是实型变量)2021-01-25
- 浅谈民用建筑电气设计中智能消防应急照明系统的运用
- 抖音怎么发起挑战 发起挑战怎么玩
- 游戏设计模式阅读笔记3——重访设计模式(观察者模式)
- 卡在装备配置计算机,win10开机卡logo的小伙伴有福了,赶紧看过来!
- 汽车销量数据库(分车型、分品牌月度销量数据 2005-2021)
- 日语在线翻译excite网页版
- SAP OOALV分割屏幕
- js 关键字搜索功能
- 真值推理-Truth Inference-----Is the Problem Solved?
- layui表格设置字体颜色
热门文章
- 量子计算机 叉院,清华团队首次实现量子GAN 准确率98.8%
- 你了解 JDK 8 Stream 数据流效率吗?千万级数据量性能如何?
- ArrayList,LinkedList,Vector三者的异同
- Kotlin苦海无涯(四) Object
- qiankun使用Actions实现通信
- css3缓慢出现,让CSS3旋转开始缓慢然后结束缓慢?
- Zedboard(一)开发环境Vivado
- 备品管理方案怎么写_备品备件管理制度62802
- 【论文笔记09】Teaching Machines to Read and Comprehend
- Python unrar解压rar压缩文件