一、C++基础知识
1.面向对象的特性:封装、继承和多态。

所谓封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。

所谓继承,是指可以让某个类型的对象获得另一个类型的对象的属性的方法。继承概念的实现方式有两类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。

所谓多态,就是向不同对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。

2.构造函数和析构函数

所谓构造函数,主要作用是用于初始化对象的数据成员。构造函数的名称必须与类名相同。如果没有定义任何构造函数,则C++会自动提供一个默认构造函数。

所谓析构函数,就是用来释放或返还生命周期即将结束的类对象所占据的资源。析构函数与构造函数是相对立或互补的,构造函数获取资源,析构函数释放资源。

3.静态绑定和动态绑定

静态类型,指的是对象(指针、引用)在声明时的类型。
动态类型,指的是当前对象(包括指针和引用)实际指向的类型。

静态绑定,绑定的是对象的静态类型,某特性(比如函数)依赖于对象的静态类型,发生在编译期。

动态绑定,绑定的是对象的动态类型,某特性(比如函数)依赖于对象的动态类型,发生在运行期。

在C++的继承关系中,指针或引用的动态类型与静态类型可以不同,这是C++实现多态的关键。
借用两句话:
只有虚函数才使用的是动态绑定,其他的全部是静态绑定。
绝不重新定义继承而来的缺省参数。

4.动态绑定与多态性、虚函数

(1)C++中的多态表示的是使用一个公有的父类指针(或引用),寻址一个子类对象。换句话说,就是“一个接口,多个方法”。C++多态性的实质就是为了实现“使用指向子类对象的父类指针(或引用)访问子类中的成员函数,而不是父类中的成员函数”。
(2)C++实现动态绑定:在C++的继承关系中,动态绑定必须使用虚函数和父类类型的指针(或引用)来实现,两者缺一不可。

5.虚函数
(1)在子类中可以对父类中的虚函数进行重定义。若子类为重定义父类中的虚函数,则子类继承父类的虚函数。
(2)子类重定义虚函数:在子类重定义虚函数时,该重定义的虚函数必须与父类中的虚函数的声明完全相同,包括返回类型、存储类说明符、限定修饰符const等,否则不是对虚函数的重定义。

总结:在C++中的多态就是“通过父类的引用(或指针)调用虚函数”,这时发生的是动态绑定,指针或引用的动态类型与静态类型可以不同(因为引用(或指针)既可以指向父类对象,也可以指向子类对象),这是实现动态绑定的关键。用引用(或指针)调用虚函数时,被调用的是引用(或指针)所指对象的实际类型(动态类型)中所定义的虚函数。

C++之面向对象的三个基本特征
深入理解C++的动态绑定和静态绑定

《剑指offer》第二章——关于面试官王海波的思考相关推荐

  1. 剑指Offer第二版Java代码实现

    剑指Offer第二版Java代码实现 A.单例模式 面试题 2:实现Singleton模式 B.面试需要的基础知识 面试题 3:数组中重复的数字 面试题 4:二维数组的查找 面试题 5:替换空格 面试 ...

  2. python数据结构与算法刷题——剑指offer第二版加部分leetcode题

    说不清楚,只能看代码理解的用红色标出 查找算法:查找较排序来说较简单,不外乎顺序查找和二分查找.哈希表查找和二叉排序树查找.(很多面试官喜欢让应聘者写出二分查找(如test53)的代码)[注意:二分查 ...

  3. 剑指offer第二版答案详细版(带详细解题思路)

    1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...

  4. 剑指offer第二版(leetcode)Java题解(不断更新)

    1 数组中的重复数字 题目 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一 ...

  5. 剑指offer 第二版(101——119)(全部完结)

    剑指 Offer II 101. 分割等和子集 bool canPartition(vector<int>& nums) {int sum=0;for(int i=0;i<n ...

  6. 剑指offer 第一章 面试的流程

    面试的流程 面试的三种形式 电话面试:形象化语言讲解细节:如果没有听清楚和听懂问题,不要不懂装懂,答非所问 共享桌面,远程面试:编程习惯和调试能力.1,思考清楚再开始编码,先想思路,考虑时间和空间复杂 ...

  7. 剑指offer快速回忆之面试的流程

    摘要 重点是项目贡献.链表.二叉树.查找.排序.鲁棒高质量:提问项目和自己的结合问题 三种面试形式 1.电话面试 有些面试官喜欢搞突袭,准备手机有电,不要长时间处于嘈杂环境 表达要清晰,问题没搞明白, ...

  8. 【C++面试必备】一个专栏带你搞定剑指offer第二版

    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343

  9. 剑指offer第二版-9.用两个栈实现队列

    描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...

最新文章

  1. oracle外键如何创建索引,子表建立外键的索引问题
  2. 摘录来自mysql 5.1的手册 关于mysql的事务处理和锁定语句
  3. Segment Routing — SR-MPLS
  4. Python 制作微信全家福,你就是朋友圈最亮的仔!
  5. android studio 快速删除无用的import包
  6. 图像分类 数据准备(将文件夹中所有图片路径写到TXT文件中)
  7. 实现Android的消息通知栏
  8. zafu 1461 (DP)
  9. jquery mobile页面跳转后js不执行的问题
  10. 迅捷PDF转换器特点和使用步骤
  11. 哈理工OJ 1983 Math(前缀和)
  12. 总结完全二叉树、满二叉树、二叉排序树、二叉平衡树
  13. Skype for business之Skype会议直播
  14. 中国脑计划颠覆性创新之路四,用脑科学预测互联网的未来发展趋势
  15. oracle diagnosticdest,Oracle 11g自动诊断信息库(Automatic Diagnostic Repository,ADR)概述
  16. 容齐的身世_白发容齐和容乐是什么关系?容齐和容乐是兄妹吗?
  17. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!...
  18. 重新认识LODGroup
  19. 软件设计师教程(十三)计算机系统知识-软件系统分析与设计
  20. 本地浏览php网页的方法

热门文章

  1. 凉拌洋葱怎么做简单又好吃
  2. 智能的纠缠:意与理,矛与盾
  3. 解读 | 2019 年 10 篇计算机视觉精选论文(中)
  4. 印度提高关税,富士康或是大赢家
  5. WPF仿QQ聊天框表情文字混排实现
  6. 从终端进入本地其他磁盘
  7. NFV 2.1安装指南之十 —— Install and Configure vCloud director (VCD)
  8. 拖放排序列表JS插件---SortableJS使用教程
  9. Java基础语法-双色球彩票
  10. 一个专注极简的导航主页