面试中有关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. php dday1... web服务器的搭建 数据库的安装....

  2. BitMap - leetcode [位运算]

    136. Single Number 因为A XOR A = 0,且XOR运算是可交换的,于是,对于实例{2,1,4,5,2,4,1}就会有这样的结果: (2^1^4^5^2^4^1) => ( ...

  3. [MFC美化] SkinSharp使用详解2-SkinH.h函数介绍

    SkinSharp功能强大,该皮肤库支持完全多种颜色改变等. 下面是静态链接库时的SkinH.h头文件: /*在Stdafx.h文件中加入如下语句 #include "SkinH.h&quo ...

  4. NGINX----源码阅读一(main函数)

    1.ngx_debug_init(); 初始化debug函数,一般为空. 2.ngx_strerror_init(): 将系统错误码+错误信息,以ngx_str_t数组保存. 3.ngx_get_op ...

  5. 效果网址http://sc.chinaz.com/tag_jiaoben/tupianlunbo.html

    http://sc.chinaz.com/tag_jiaoben/tupianlunbo.html

  6. hdu1028

    #include<stdio.h>#include<string.h>const int MAXN=130;int dp[MAXN][MAXN];//dp[i][j]表示 i ...

  7. Chapter 2 Open Book——35

    Mr. Banner called the class to order then, and I turned with relief to listen. Banner先生让大家安静听他说,然后我静 ...

  8. java-进程

    一个java进程,只有一个入口,就是main方法. tomcat是一个java进程,tomcat只有一个入口,org.apache.catalina.startup.Bootstrap  类的main ...

  9. 大数据揭示的10个常见JAVA编程错误

    初学者最常犯的编程错误是什么呢?有可能他们总是混淆等值(==)与赋值(=),或者 & 和 &&:也有可能是他们在循环中使用错误的分隔符(for (int i = 0, i &l ...

  10. QDataStream对QVector的序列化

    最近发现QDataStream这个好东东,序列化发送数据很方便,与大家分享一下. 客户端: line.h #ifndef LINE_H #define LINE_H #include <QStr ...