面试中有关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. ssh中的 Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

    这个错误我整理了  半天才发现问题的存在. 尝试了网上的很多办法,但是最后都没有达到效果. 包括这两种: 第一种: web.xml种的配置 <filter> <filter-name ...

  2. CentOS6.5 部署VPN管理系统(StrongSwan+iKEv2+Freeradiu+Mysql+Daloradius)

    一.环境介绍 Server IP:192.168.30.133 System: CentOS 6.5 Client:Winodows 二.编译安装StrongSwan 1.下载StrongSwan w ...

  3. iOS开发系列-UI基础-KVC

    这些知识是UI初级学习的,目前我还在学习中,适合初学者看 KVC—Key Value Coding 也就是键值编码 是一种获取值和设置值的方式 当我们创建一个类文件,为这个类设置成员属性的时候: 创建 ...

  4. Java 序列化 JDK序列化总结

    Java 序列化 JDK序列化总结 @author ixenos Java序列化是在JDK 1.1中引入的,是Java内核的重要特性之一.Java序列化API允许我们将一个对象转换为流,并通过网络发送 ...

  5. sqlserver 操作xml

    1.xml.exist    输入为XQuery表达式,返回0,1或是Null.0表示不存在,1表示存在,Null表示输入为空 2.xml.value    输入为XQuery表达式,返回一个SQL ...

  6. delphi变量作用域

    完全摘自网络(一件飘雪),供参考: 很多初学者对delphi单元的变量和函数访问权限不理解,在此我举例说明,希望初学者看此文后能茅塞顿开. delphi单元的变量和函数访问权限问题如下两个单元描述: ...

  7. mvc前端样式自定义

    1.别忘记加 htmlAttributes @Html.EditorFor(model => model.Quantity, new { htmlAttributes = new { @clas ...

  8. Log4J1升级Log4J2

    近期,碰到需要将项目中的Log4J1升级到Log4J2,现进行下总结.交代下技术背景:web项目,基于Java + Maven 1. 依赖 <dependency> <groupId ...

  9. mac关机快捷键

    1.Ctrl + 关机:弹出关机提示 2.Ctrl + Option + 关机 : 正常关机快捷键 3.Command + Option + 关机 :进入休眠状态 4.Ctrl + Command + ...

  10. 微信超时5s,调用客服接口异步回复消息(PHP)

    当用户触发事件,如果不能保证在5s内响应,可以先返回success,然后异步调用返回的信息.代码如下: // 立即返回(异步执行) ignore_user_abort(true);//start=== ...