面试中有关C++的若干问题

By 晴天, 2014.5.16晚

什么是多态?简要说一下C++中的多态的概念。

(1)定义:多态是指相同对象收到不同消息或者不同对象收到相同消息产生不同的行为。

(2)C++中多态分为两种

a) 编译时多态(静态绑定)

通过函数重载来实现

b) 运行时多态(动态绑定)

通过虚函数来实现

(3)它与这几关键词联系在一起

动态绑定 virtual关键字/虚函数 函数重载 虚函数表

只有基类用virtual修饰的函数才有可能实现多态。跟派生类用不用virtual修饰没有关系。

 

我的感受

多态:给定哪个对象(内存中的真实存在的对象)调用的就是这个对象的方法,与怎么调用的没关系,哪怕把这个对象的指针转换成基类或其他派生类的指针,都不影响,这恰恰是多态需要保证的性质。

 

其他相关的

面向对象的四大性质

 

(1)抽象

(2)封装--可以使代码模块化

(3)继承--可以复用/扩展已存在的代码

(4)多态--为了接口重用,注: (2)(3)都是为了代码重用

 

函数覆盖--指派生类重新定义基类的方法 override

函数隐藏--指派生类的函数屏蔽了与其同名的基类函数

 

重载和重写是同一个意思 (override,overwrite)有时也称为函数覆盖,

派生类可以重载成员函数,只有重载父类定义的虚函数才能构成多态。

 

纯虚函数 与 抽象类

引入纯虚函数的目的,一是为了不让不合理的基类实例化,二是强制派生类实现纯虚函数

做法,就是让函数声明后面加上"=0"

 

参考

[1] http://blog.csdn.net/hackbuteer1/article/details/7475622

 

待补充

 

什么是动态绑定,怎么实现的?涉及到多重继承是怎么样的?

待完成

 

 

C++中指针和数组的区别(准确表达是数组名和指针的区别)

关于数组:

(1)数组名它相当于一个指针常量,但它实际是指代数组这种数据结构;

(2)能通过sizeof来求得数组所占内存的大小,也能求得数组的长度(多维数组同样能求得每一维的长度);

(3)数组是通过数组名的地址+偏移量来获取元素;

(4)通过函数调用时,将数组作为参数,那么数组会退化成指针。

 

关于指针:

(1)指针它就是一个固定大小的变量,通常是4个字节,它是用来存储地址的,间接访问数据或函数;

(2)指针可以进行自增(自减)运算(void指针除外,因为不知道步长)。

 

更具体一点,指针和数组访问的区别?

数组是通过数组名的地址+偏移量来获取元素,数组名是编译时就知道它的地址的,直接获取元素;

指针是先获取指针变量里的地址,(这个地址是在运行时才能确定,有可能是无效的),然后再获取该地址的内容。

 

容易忽略的地方

注意声明和定义的区别,定义是为一个变量或者对象分配内存空间,而声明只是描述类型

关于数组char a[5], a与&a是不同的,不是说得到的地址不同,而是说有不同的含义(a+1与&a+1结果是不同的)。

 

参考:

[1] http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html

[2] http://see.xidian.edu.cn/cpp/html/475.html

 

 

C++中new的过程是怎么样的?

待完成

面试中有关C++的若干问题的更多相关文章

  1. 浅谈面试中的OOD面向对象设计问题

    转载自:http://baozitraining.org/blog/Object-oriented-design-question/ OO设计问题是电面或者onsite中常考的问题,尤其对以Java为 ...

  2. 面试中要注意的 3 个 JavaScript 问题

    JavaScript 是 所有现代浏览器 的官方语言.因此,各种语言的开发者面试中都会遇到 JavaScript 问题. 本文不讲最新的 JavaScript 库,通用开发实践,或任何新的 ES6 函 ...

  3. 面试中注意3个javascript的问题

    JavaScript 是所有现代浏览器的官方语言.因此,各种语言的开发者面试中都会遇到 JavaScript 问题. 本文不讲最新的 JavaScript 库,通用开发实践,或任何新的 ES6 函数. ...

  4. 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点

    目录 JVM 内存划分与内存溢出异常 垃圾回收算法与收集器 虚拟机中的类加载机制 Java 内存模型与线程 虚拟机性能监控与故障处理工具 参考 带你全面了解高级 Java 面试中需要掌握的 JVM 知 ...

  5. 如何在面试中介绍自己的项目经验(面向java改进版)

    本人于3年前写的博文,如何在面试中介绍自己的项目经验,经过大家的捧场,陆续得到了将近7万个点击量,也得到了众多网站公众号的转载,不过自己感觉,这篇文章更多的是偏重于方法,没有具体给到Java方面相关的 ...

  6. 《PHP程序员面试笔试宝典》——如何克服面试中紧张的情绪?

    本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 面试的成功与否,往小的方面讲,直接关系到求职者的工作问题,往大 ...

  7. 在面试中忽然发现DateTime的一些...

    今天说说我面试中碰到的一个小问题,在我问起DateTime为什么无法赋值NULL值,一般第一反应都认为它是值类型,不是引用类型,但随后我查阅了度娘自我学习到它是结构类型,那么随之而然就无法赋值NULL ...

  8. 面试中关于Java你所需知道的的一切

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...

  9. 前端js面试中的常见的算法问题

    虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂 ...

随机推荐

  1. 查增删改MySQL数据库固定模式

    省略相关包的导入... public class Base { public static Connection connection = null; public static PreparedSt ...

  2. 循序渐进看Java web日志跟踪(3)-Log4J的使用和配置

    之前说过关于java日志跟踪的几大主要用的框架,也说到了,其实在其中,Log4J充当着一个相当重要的角色.目前,大部分框架也都是采用的是Log4J,虽然说它已经停止了更新,作者也重新起了LogBack ...

  3. js学习笔记1

    就是调用对象是一个Array,对Array类型增加了一个原型写法的函数,一般写一些扩展时经常用.比如判断一个元素是否在数组中之类的 Array.prototype.inArray=function(v ...

  4. WEB典型应用

  5. PHP的ip2long和long2ip函数的实现原理

    最近要做个十进制数字的可逆转换做邀请码,一直没搞清楚怎么弄的,实在太复杂了,今天弄IP时想到这个可以进行转换,于是研究了下原理: 主要是自己整理了下: $ip = '12.34.56.78'; $ip ...

  6. [其他]win7下chrome浏览器插件导出与导入

    下载了某些插件,重装电脑怎么不备份,重装之后怎么再次使用,一文搞定! 导出crx格式备份文件 1.选择 自定义格式及控制 > 更多工具 > 扩展程序: 2.勾选"开发者模式&qu ...

  7. 【小技巧】C#的saveFileDialog和openFileDialog的用法总结

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. 初始go语言

    一.创建第一个go语言程序:打印hello world! package main import "fmt" func main() { fmt.Println("Hel ...

  9. ubuntu 设置静态IP之后不能上网。

    一个同事设置之后不能上网. 根据经验DNS有问题. 所以就设置8.8.8.8 之后就好了 DONE

  10. vs2013 中已经添加了引用,编译还是提示没有添加引用

    背景:在项目中需要引用wps中的etapi.dll.下载一个wps后,在项目中添加引用后. 同时在工程中使用using命令可以自动搜索进行添加该应用.但是,编译还是通不过.提示找不到excel.在网上 ...