面试中有关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. git的一些疑难点

    一 .git reset,git revert,git checkout的区别和联系 主要参考:http://www.cnblogs.com/houpeiyong/p/5890748.html git ...

  2. 相对协议-关于src里//开头的知识

    "相对协议",也就是链接以 // 开头,前面去掉了 http: 或 https: 字样, 这样做的好处是浏览器能够根据你的网站所采用的协议来自动加载 CDN 上托管的文件!

  3. ios开发设置不同字体

    最近项目开发中遇到需要设置指定字体的需求,研究了一下字体设置,最后附有我写的一个小demo,先来看一下效果: 开始上网搜了一下,普遍说到以下方法 for(NSString *fontfamilynam ...

  4. Unity3d请求webservice

    我们在对接第三方sdk时,第三方sdk通常会以一个webservice接口的形式供我们来调用.而这些接口会以提供我们get,post,soap等协议来进行访问.get,post方法相信大家都比较熟悉了 ...

  5. CodeForces 710A King Moves

    简单题. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #inclu ...

  6. 当页面加载完成时,JQ触发添加页面的元素的事件触发不了。。

    有下代码可知: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default. ...

  7. 默认conf指向位置

    查看nginx 默认配置文件所在位置 >> nginx -t  print --> nginx: the configuration file /etc/nginx/nginx.co ...

  8. Eclipse中安装Jdk和配置Python

    要借助Eclipse辅助工作,之前安装配置都是同事帮忙弄的,今天有空来整理一下安装配置步骤 一.安装JDK1.下载JDK,安装JDK,安装完毕,配置JDK环境变量  1)我的电脑右键-属性-高级-点击 ...

  9. Linux下获取IP、MAC、网关、掩码的shell脚本

    Mask:ifconfig |grep inet| sed -n '1p'|awk '{print $4}'|awk -F ':' '{print $2}'IP:ifconfig |grep inet ...

  10. scala实现快速排序

    scala> def qSort(a: List[Int]): List[Int] = { | ) a | else qSort( a.filter(a.head > _ )) ++ | ...