《剑指offer》第二章——关于面试官王海波的思考
一、C++基础知识
1.面向对象的特性:封装、继承和多态。
所谓封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。
所谓继承,是指可以让某个类型的对象获得另一个类型的对象的属性的方法。继承概念的实现方式有两类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。
所谓多态,就是向不同对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。
2.构造函数和析构函数
所谓构造函数,主要作用是用于初始化对象的数据成员。构造函数的名称必须与类名相同。如果没有定义任何构造函数,则C++会自动提供一个默认构造函数。
所谓析构函数,就是用来释放或返还生命周期即将结束的类对象所占据的资源。析构函数与构造函数是相对立或互补的,构造函数获取资源,析构函数释放资源。
3.静态绑定和动态绑定
静态类型,指的是对象(指针、引用)在声明时的类型。
动态类型,指的是当前对象(包括指针和引用)实际指向的类型。
静态绑定,绑定的是对象的静态类型,某特性(比如函数)依赖于对象的静态类型,发生在编译期。
动态绑定,绑定的是对象的动态类型,某特性(比如函数)依赖于对象的动态类型,发生在运行期。
在C++的继承关系中,指针或引用的动态类型与静态类型可以不同,这是C++实现多态的关键。
借用两句话:
只有虚函数才使用的是动态绑定,其他的全部是静态绑定。
绝不重新定义继承而来的缺省参数。
4.动态绑定与多态性、虚函数
(1)C++中的多态表示的是使用一个公有的父类指针(或引用),寻址一个子类对象。换句话说,就是“一个接口,多个方法”。C++多态性的实质就是为了实现“使用指向子类对象的父类指针(或引用)访问子类中的成员函数,而不是父类中的成员函数”。
(2)C++实现动态绑定:在C++的继承关系中,动态绑定必须使用虚函数和父类类型的指针(或引用)来实现,两者缺一不可。
5.虚函数
(1)在子类中可以对父类中的虚函数进行重定义。若子类为重定义父类中的虚函数,则子类继承父类的虚函数。
(2)子类重定义虚函数:在子类重定义虚函数时,该重定义的虚函数必须与父类中的虚函数的声明完全相同,包括返回类型、存储类说明符、限定修饰符const等,否则不是对虚函数的重定义。
总结:在C++中的多态就是“通过父类的引用(或指针)调用虚函数”,这时发生的是动态绑定,指针或引用的动态类型与静态类型可以不同(因为引用(或指针)既可以指向父类对象,也可以指向子类对象),这是实现动态绑定的关键。用引用(或指针)调用虚函数时,被调用的是引用(或指针)所指对象的实际类型(动态类型)中所定义的虚函数。
C++之面向对象的三个基本特征
深入理解C++的动态绑定和静态绑定
《剑指offer》第二章——关于面试官王海波的思考相关推荐
- 剑指Offer第二版Java代码实现
剑指Offer第二版Java代码实现 A.单例模式 面试题 2:实现Singleton模式 B.面试需要的基础知识 面试题 3:数组中重复的数字 面试题 4:二维数组的查找 面试题 5:替换空格 面试 ...
- python数据结构与算法刷题——剑指offer第二版加部分leetcode题
说不清楚,只能看代码理解的用红色标出 查找算法:查找较排序来说较简单,不外乎顺序查找和二分查找.哈希表查找和二叉排序树查找.(很多面试官喜欢让应聘者写出二分查找(如test53)的代码)[注意:二分查 ...
- 剑指offer第二版答案详细版(带详细解题思路)
1.滑动窗口的最大值(剑指offer原59题) 解题思路:其实是一个队列的问题,用一个队列去维护当前窗口中的所有元素:首先将超出窗口中的队头元素先删掉,然后将新的元素插入当前窗口中,插入时要判断新插入 ...
- 剑指offer第二版(leetcode)Java题解(不断更新)
1 数组中的重复数字 题目 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一 ...
- 剑指offer 第二版(101——119)(全部完结)
剑指 Offer II 101. 分割等和子集 bool canPartition(vector<int>& nums) {int sum=0;for(int i=0;i<n ...
- 剑指offer 第一章 面试的流程
面试的流程 面试的三种形式 电话面试:形象化语言讲解细节:如果没有听清楚和听懂问题,不要不懂装懂,答非所问 共享桌面,远程面试:编程习惯和调试能力.1,思考清楚再开始编码,先想思路,考虑时间和空间复杂 ...
- 剑指offer快速回忆之面试的流程
摘要 重点是项目贡献.链表.二叉树.查找.排序.鲁棒高质量:提问项目和自己的结合问题 三种面试形式 1.电话面试 有些面试官喜欢搞突袭,准备手机有电,不要长时间处于嘈杂环境 表达要清晰,问题没搞明白, ...
- 【C++面试必备】一个专栏带你搞定剑指offer第二版
✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
- 剑指offer第二版-9.用两个栈实现队列
描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...
最新文章
- oracle外键如何创建索引,子表建立外键的索引问题
- 摘录来自mysql 5.1的手册 关于mysql的事务处理和锁定语句
- Segment Routing — SR-MPLS
- Python 制作微信全家福,你就是朋友圈最亮的仔!
- android studio 快速删除无用的import包
- 图像分类 数据准备(将文件夹中所有图片路径写到TXT文件中)
- 实现Android的消息通知栏
- zafu 1461 (DP)
- jquery mobile页面跳转后js不执行的问题
- 迅捷PDF转换器特点和使用步骤
- 哈理工OJ 1983 Math(前缀和)
- 总结完全二叉树、满二叉树、二叉排序树、二叉平衡树
- Skype for business之Skype会议直播
- 中国脑计划颠覆性创新之路四,用脑科学预测互联网的未来发展趋势
- oracle diagnosticdest,Oracle 11g自动诊断信息库(Automatic Diagnostic Repository,ADR)概述
- 容齐的身世_白发容齐和容乐是什么关系?容齐和容乐是兄妹吗?
- Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!...
- 重新认识LODGroup
- 软件设计师教程(十三)计算机系统知识-软件系统分析与设计
- 本地浏览php网页的方法