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

面试中有关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++的若干问题,布布扣,bubuko.com

时间: 2024-08-08 09:40:20

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

面试中注意3个javascript的问题

JavaScript 是所有现代浏览器的官方语言.因此,各种语言的开发者面试中都会遇到 JavaScript 问题. 本文不讲最新的 JavaScript 库,通用开发实践,或任何新的 ES6 函数.而是讲讲面试中经常出现的 3 个 JavaScript 问题.我问过这些问题,我的朋友说他们也问. 当然不是说你在准备 JavaScript 面试时只要学习这 3 个问题 -- 你还有很多途径去更好的准备即将到来的面试 -- 但面试官很有可能通过下面 3 个问题来判断你了解和掌握 JavaScrip

面试中的排序算法总结(转)

转自http://www.codeceo.com/article/10-sort-algorithm-interview.html 前言 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码.对这两种排序的代码一定要信手拈来才行.还有插入排序.冒泡排序.堆排序.基数排序.

编程面试中排名前10的算法

以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 Arrays.sort() // 数组排序 Arrays.toString(char[] a) // 数组转成字符串 charAt(int x) // 获得

面试中的排序算法总结

来源:http://www.cnblogs.com/wxisme/p/5243631.html 前言 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码.对这两种排序的代码一定要信手拈来才行.还有插入排序.冒泡排序.堆排序.基数排序.桶排序等.面试官对于这些排序可能会要

程序员面试中常见10大算法汇总

以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念.由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍.本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. 1 2 3 4 5 6 toCharArray() // 获得字符串对应的char数组 Arrays.sort() // 数组排序 Arrays.toString(char[] a) // 数组转成字符串 charAt(

面试中的 10 大排序算法总结

点击查看原文 前言 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码.对这两种排序的代码一定要信手拈来才行.还有插入排序.冒泡排序.堆排序.基数排序.桶排序等.面试官对于这些排序可能会要求比较各自的优劣.各种算法的思想及其使用场景.还有要会分析算法的时间和空间复杂度.

JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求

面试中对Hibernate缓存机制的回答

这是面试中经常问到的一个问题,可以按照下面的思路回答,准你回答得很完美.首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具体的例子.Hibernate缓存的作用: Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据Hibernat

程序员如何快速准备面试中的算法

前言 我决定写篇短文,即为此文.之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法.尽管在微博上简单梳理过,如下图所示: 但因字数限制,特撰此文着重阐述下:程序员如何快速准备面试中的算法,顺便推荐一些相关的书籍或资料. 备战面试中算法的五个步骤 总体来说,备战面试中的算法,分为五个步骤,如下: 1.首选你得确保自己已经掌握好一门编程语言 如果是C的话,推荐Dennis M. Ritchie & Brian W. Kernighan著的<C程序设计语言>,和<