C++面试总结

1、多态

      C++多态分两种--静态和动态,其中静态联编支持的多态称为编译时多态,包括重载和模板;动态联编支持的多态称为运行时多态,包括

继承和虚函数实现。

多态主要是由虚函数实现的,虚函数允许子类重新定义基类的虚函数(override);重载(overload)则是一个类中有多个同名函数,这些函数的参数列

表不同(参数类型、个数)。

多态的目的是为了接口重用:不论传递过来的是哪个类的对象,都能通过同一个接口调用到适应各自对象的实现办法。

最常用的方法就是声明基类的指针,利用该指针指向子类对象,调用相应的虚函数,可以根据指向子类的不同而调用不同的虚函数。

 2.四种类型转换

static_cast:基本数据类型转换(int->float);类层次结构中上行转换(派生类转为基类),下行转换不安全。

dynamic_cast:类层次间的上、下行转换,都是安全的,下行转换会检查被转换的类(基类)是否有虚函数,有虚函数才合法。

reinterpret_cast:将一个类型的指针转为另一个类型的指针。

const_cast:把const类型的指针转为非const类型的指针。

3.运算符重载

        单目声明为成员函数,多目声明为友元。

重载流插入和流提取运算符:istream& operator >>(istream&,自定义类&),只能定义为友元或普通函数。

4、内存对齐原则 

1.数据成员对齐规则:struct, union的数据成员,第一个数据成员放在offset为0的地方,之后的数据成员的存储起始位置都是放在该数据成员大小的整数倍位置。如在32bit的机器上,

int的大小为4,因此int存储的位置都是4的整数倍的位置开始存储。

    2.结构体作为数据成员的对齐规则:在一个struct中包含另一个struct,内部struct应该以它的最大数据成员大小的整数倍开始存储。如 struct A 中包含 struct B, struct B 中包含数据

成员 char, int, double,则 struct B 应该以sizeof(double)=8的整数倍为起始地址。

    3.收尾工作的对齐规则:整个struct的大小,应该为最大数据成员大小的整数倍。

5、模板实现

函数模板:

template<typename T 或 class T>
T max(T a, T b ,T c)

类模板:

template<typename T> class 类名{

}

6、指针和const

指向常量的指针:不能用于改变所指常量的值

const double pi = 3.14
const double *cptr = &pi;

常量指针:指针本身为常量(指针为对象,引用不是,所以没有常量引用),必须初始化且指针中的地址不能再改变。

int errNum = 0;
int * const curErr = &errNum;

指向常量的常量指针:既不能修改指向的对象,也不能修改只想对象的值

7、虚函数

C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现子类可以重写父类的虚函数实现子类的特殊化。

        C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。纯虚函数无函数体:viutual float area()const=0;

基类的析构函数要定义为虚函数,防止delete基类指针时,只调用基类的析构函数而不执行派生类的析构函数。

8、内联函数

执行普通函数时,程序会先进行入栈保护,转到函数位置执行函数,然后再返回。需要一定的开销。

程序无需跳到另外一个位置执行代码,使用函数代码替换函数调用,调用快,无需内存开销。

宏:内联代码的参数是按值传递的,宏是通过文本替换。

9、typedef

四种用途(主要是为了定义别名),参考:http://www.cnblogs.com/charley_yang/archive/2010/12/15/1907384.html

关于和define的区别,参考:http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html

时间: 2024-10-17 11:19:48

C++面试总结的相关文章

面试宝典_Python.常规算法.0001.在圆圈和框框分别填入1~8数字各一次?

面试题目: 解题思路: 1. 总共8个位置,只要2个圈圈之差等于框框即可,注意倒数第3个数还要和第1个数字运算才算结束,所以可以先生成排列组合然后再通过分片偏移来获取符合条件的结果. 具体实现: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date    : 2016-12-24 12:19:01 # @Author  : 李满满 ([email protected]) # @Link    : http://xmdevops.blog.51

Web前端面试题目及答案汇总

前端新人在面试前都比较焦虑,担心回答不上面试官的问题,也担心自己紧张,其实这都是心理没底的表现,今天和大家分享web前端开发常见面试题及答案,希望可以帮助即将面试的前端同学顺利通过面试. HTML/CSS部分 1.什么是盒子模型? 在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分.这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或

Web前端面试指导(一):写好简历是面试成功的第一步

1.1 简历的作用 简历是求职找工作的敲门砖,优秀的简历更能获取面试的机会 简历是用人单位获取你个人信息的最直接的一种方式 如果没有简历,我们的工作不知从何早起. 1.2 初次写简历存在的困境 以前从来没有写过简历,不知道从哪里写起. 简历的内容不知道写什么,本来语文就不好. 简历写好了不知道可不可以,自己也拿捏不准. 简历常见问题 1)  个人信息简介不完整,甚至连性别都没有写 2)  专业技能描述太细,排序不合理 3)  项目太多或太少,项目描述内容太少, 4)  简历雷同 a)  样式雷同

数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 树 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树 二叉树的创建,关系建立 二叉树的创建,关系建立2 三叉链表法 双亲链表: 二叉树的遍历 遍历的分析PPT 计算二叉树中叶子节点的数目:使用全局变量计数器 计算二叉树中叶子节点的数目:不使用全局变量计数器 无论是先序遍历,中序遍历,后序遍历,求叶子的数字都不变;因为本质都是一样的,任何一个节点都会遍历3趟 求二叉树的高度 二叉树的拷

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

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

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.

【面试】iOS 开发面试题(二)

1. 我们说的oc是动态运行时语言是什么意思? 答案:多态. 主要是将数据类型的确定由编译时,推迟到了运行时. 这个问题其实浅涉及到两个概念,运行时和多态. 简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法. 多态:不同对象以自己的方式响应相同的消息的能力叫做多态.意思就是假设生物类(life)都用有一个相同的方法-eat; 那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法. 也就是不同的对象以自己的

iOS开发——面试篇&amp;OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的

关于如何自学web前端以及一些面试的经验分享

自学怎么学好前端开发? 一千个人来回答这个问题有一千种答案,每个人的自学能力各不相同,适合我的方法不一定适合你.但是大家可以相互借鉴,苹果交换过后还是一个苹果,思想交换过后就是两种思想了.我这里把我的方法分享出来,多少也有一些借鉴的经验或者让你少走一些弯路. 有的人喜欢安静的一个人看书专研,有的人喜欢看网络视频教程,而我更偏向于后者,当然你时间充足的话看书加看视频效果更好.学习的主线视频是我花10块钱在某宝上淘的,这套视频是传智播客2015.12-2016.3期间实体班的全程录像,很新,最主要的

JAVA面试必备的知识宝典(一)

相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点: 可替换性:多态对已存在代码具有可替换性. 可扩充性:增加新的子类不影响已经存在的类结构. 接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或者重写它来实现的. 灵活性: 简化性: 代码中如何实现多态 实现多态主要有以下三种方式: 1. 接口实现