经典C++面试题一


Posted in 面试题 onNovember 06, 2016
1.介绍一下STL,详细说明STL如何实现vector。
STL (标准模版库,Standard Template Library)它由容器算法迭代器组成。
STL有以下的一些优点:
可以方便容易地实现搜索数据或对数据排序等一系列的算法;
调试程序时更加安全和方便;
即使是人们用STL在UNIX平台下写的代码你也可以很容易地理解(因为STL是跨平台的)。
vector实质上就是一个动态数组,会根据数据的增加,动态的增加数组空间。

2.如果用VC开发程序,常见这么几个错误,C2001,c2005,c2011,这些错误的原因是什么。
在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:
  unresolved external symbol “symbol”(不确定的外部“符号”)。
如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。
一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。
编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误.
3.继承和委派有什么分别,在决定使用继承或者委派的时候需要考虑什么。
在OOD,OOP中,组合优于继承.
当然多态的基础是继承,没有继承多态无从谈起。
当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类。
当对象的类型影响类中函数的行为时,就要使用继承来得到这样一组类.
4.指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?
(1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值.
(2) 不存在NULL引用,引用必须与合法的存储单元关联;而指针则可以是NULL.
(3) 引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象.给引用赋值并不是改变它和原始对象的绑定关系.
(4) 引用的创建和销毁并不会调用类的拷贝构造函数
(5) 语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换.
不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,显得很安全。
const 指针仍然存在空指针,并且有可能产生野指针.
总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性.
5.参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么;
传值,传指针或者引用
6.结合一个项目说明你怎样应用设计模式的理念。
设计模式更多考虑是扩展和重用,而这两方面很多情况下,往往会被忽略。
不过,我不建议滥用设计模式,以为它有可能使得简单问题复杂化.
7.介绍一下你对设计模式的理解。(这个过程中有很多很细节的问题随机问的)
设计模式概念是由建筑设计师Christopher Alexander提出:”每一个模式描述了一个在我们周围不断重复发生的问题, 以及该问题的解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复劳动.”上述定义是对设计模式的广义定义.将其应用到面向对象软件的领域 内,就形成了对设计模式的狭义定义.
可以简单的认为:设计模式就是解决某个特定的面向对象软件问题的特定方法, 并且已经上升到理论程度。
框架与设计模式的区别:
1,设计模式和框架针对的问题域不同.设计模式针对面向对象的问题域;框架针对特定业务的问题域
2,设计模式比框架更为抽象.设计模式在碰到具体问题后,才能产生代码;框架已经可以用代码表示
3,设计模式是比框架更小的体系结构元素.框架中可以包括多个设计模式
设计模式就像武术中基本的招式.将这些招式合理地纵组合起来,就形成套路(框架),框架是一种半成品.
8.C++和C定义结构的分别是什么。
C language 的结构仅仅是数据的结合
C plus plus的struct 和 class 其实具备几乎一样的功能,只是默认的访问属性不一样而已。
9.构造函数可否是虚汗数,为什么?析构函数呢,可否是纯虚的呢?
构造函数不能为虚函数,要构造一个对象,必须清楚地知道要构造什么,否则无法构造一个对象。
析构函数可以为纯虚函数。
10.拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。
深拷贝意味着拷贝了资源和指针,而浅拷贝只是拷贝了指针,没有拷贝资源
这样使得两个指针指向同一份资源,造成对同一份析构两次,程序崩溃。
临时对象的开销比局部对象小些。
11.结合1个你认为比较能体现OOP思想的项目,用UML来描述。
(最好这个项目继承,多态,虚函数都有体现)这个问题大概会占面试时间的一半,并且会问很多问题,一不小心可能会被问住)
12.基类的有1个虚函数,子类还需要申明为virtual吗?为什么。
不申明没有关系的。
不过,我总是喜欢显式申明,使得代码更加清晰。
13.C也可以通过精心封装某些函数功能实现重用,那C++的类有什么优点吗,难道仅仅是为实现重用。
并不仅仅是这样的。
OOD,OOP从根本上改变了程序设计模式和设计思想,具备重大和深远的意义。
类的三大最基本的特征:封装,继承,多态.
14.C++特点是什么,如何实现多态?画出基类和子类在内存中的相互关系。
多态的基础是继承,需要虚函数的支持,简单的多态是很简单的。
子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数,operator=函数,友元函数等等
15.为什么要引入抽象基类和纯虚函数?
主要目的是为了实现一种接口的效果。
16.介绍一下模板和容器。如何实现?(也许会让你当场举例实现)
模板可以说比较古老了,但是当前的泛型编程实质上就是模板编程。
它体现了一种通用和泛化的思想。
STL有7种主要容器:vector,list,deque,map,multimap,set,multiset.
17.你如何理解MVC。简单举例来说明其应用。
MVC模式是observer 模式的一个特例,典型的有MFC里面的文档视图架构。
18.多重继承如何消除向上继承的二义性。
使用虚拟继承即可.

Tags in this post...

面试题 相关文章推荐
J2SDK1.5与J2SDK5.0有什么区别
Sep 19 面试题
Tomcat中怎么使用log4j输出所有的log
Jul 07 面试题
Java面试中常遇到的问题,也是需要注意的几点
Aug 30 面试题
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
Dec 13 面试题
存储过程的优缺点是什么
Jan 10 面试题
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
Nov 24 面试题
Linux上比较文件的命令都有哪些
Feb 24 面试题
请写出一段Python代码实现删除一个list里面的重复元素
Dec 29 面试题
介绍一下Python下range()函数的用法
Nov 07 面试题
JAVA中运算符的分类及举例
Sep 12 面试题
Java语言程序设计测试题判断题部分
Jan 06 面试题
Servlet的生命周期
Aug 25 面试题
什么是"引用"?申明和使用"引用"要注意哪些问题?
Mar 03 #面试题
编写类String 的构造函数、析构函数和赋值函数
Sep 09 #面试题
编写strcpy函数
Jun 24 #面试题
C/C++ 笔试、面试题目大汇总
Nov 21 #面试题
统计每一学生的平均成绩
Jun 06 #面试题
文件中有一组整数,要求排序后输出到另一个文件中
Jan 04 #面试题
上海奥佳笔试题面试题
Nov 16 #面试题
You might like
php跨域cookie共享使用方法
2014/02/20 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
jQuery中的常用事件总结
2009/12/27 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
python操作mysql数据库
2017/03/05 Python
Python实现读取并保存文件的类
2017/05/11 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
python实现吃苹果小游戏
2020/03/21 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
表达自我的市场:Society6
2018/08/01 全球购物
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
什么是TCP/IP
2014/07/27 面试题
大班亲子运动会方案
2014/06/10 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript