面试被囧到的一道题,贴出来与大家共享~

aladdin_lidx 2010-06-11 05:55:07
今天偶去面试,考官是一个牛人。本来觉得C++学的还可以,可是被考官面得丢盔卸甲,狼狈不堪,真是汗啊~。一下是一道面试题:
问:构造函数可以是虚函数吗?
答:不可以。
问:为什么?
答:因为一方面构造函数需要知道所要构造类的确切信息,所以不能是虚函数;另外,虚函数机制中,调用者必须是一个基类的对象的引用或指向该对象的指针。并不存在用这种机制调用构造函数的可能,所以即使构造函数被声明为虚函数也是没有用处的。
……
接下来问题就出来了。只见牛人考官眯起他那小眼睛说,还有其他原因吗?
我想了想,说我知道的就这些。
他笑眯眯的问我:一个构造函数都执行哪些操作?
答:首先调用基类的构造函数,构造对象的基类部分;然后再构造对象的派生类部分。
考官又笑了:还有呢?
还有?哎,我实在想不起来了。
考官于是笑眯眯的说:好吧,你可以回去去网上查查……
于是我的面试就OVER了。

一场面试下来,出了一身冷汗。倒不是因为紧张。而是感觉到自己平时学的东西在高手们面前竟都是些三脚猫的功夫,根本走不上几回合。悲哀啊~

PS:以上的问题有哪位高人可以指点一二,当感激不尽!
...全文
641 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2010-06-14
  • 打赏
  • 举报
回复
看看。。。
庄鱼 2010-06-14
  • 打赏
  • 举报
回复
这个题可以这样回答:
构造函数可以是虚函数吗?
原则上是不可以的。
为什么?
那要看你遵循得是什么,标准不允许,但前辈也许有能构建的方法,你能告诉我吗?
……
考官未必是要考你懂不懂C++及懂多少,而是看你有没有变通的能力,而这往往是设计人员与代码编写人员之间的最大差别。考官问的越不着调,说明需要的是越高级的人员,而不仅仅是编程者。
czxxcy 2010-06-12
  • 打赏
  • 举报
回复
其实我很明确的告诉楼主。。考官不想用你。。就算你回答的再多。。。接下去仍然是,还有呢?你总是会还有不出来的。。。。
Bot制造师 2010-06-12
  • 打赏
  • 举报
回复
学习学习
Pluto离为火 2010-06-12
  • 打赏
  • 举报
回复
haoduo
jjcang1 2010-06-12
  • 打赏
  • 举报
回复
c++ is evil
liangyonglou 2010-06-12
  • 打赏
  • 举报
回复
7楼正解!
philipzeng 2010-06-12
  • 打赏
  • 举报
回复
面试的时候这种刁钻问题,并非应聘者不知道,而是有时候很难想到。另外非常鄙视这种无聊的刁钻问题,技术者为了技术而技术,就已经违反了技术的本质了。面试官自己可能都不知道他到底要什么人,是要一个喜欢研究技术细节的,还是要一个可以快速保质完成任务的,两者是有区别的。
sallan 2010-06-12
  • 打赏
  • 举报
回复
mark
mskmc_mc 2010-06-12
  • 打赏
  • 举报
回复
构造函数的功能
1、构造函数也是一个普通函数
2、但是它与普通成员函数不同的是它有成员初始化表
3、构造函数用来初始化该类
4、可以按成员拷贝类,拷贝构造函数的参数是常量的引用,主要是必免按成员拷贝,即效率
5、在继承层次中,构造函数被定义为虚拟的是没有意义的
6、明确的算法中每个类维护了自己的一组造构函数,尤其是在继承中,派生类不可以用自己的造构来造构基类,这样将会引入基类的不明确初始化。
7、构造函数体中不可以调用虚拟成员函数,否则将是未知错误。
8、构造函数成员初始化表的初始化顺序是在类中定义的顺序
9、派生类造构调用前按顺序先调用基类构造
10、派生类造构成员初始化表中的“显示初始化基类构造”中的顺序是基类成员表中的顺序,并且基类总是先被初始化
11、如果类中的成员类对象提供了构造函数,在构造类时它们隐式调用
12、造构函数可以是转换函数,它的参数隐式接收一个转换值
13、可以使用explicit关闭构造的隐式转换
14、构造函数没有返回值
15、构造函数可以有缺省值
16、构造函数可以是内联的
17、构造函数是可以是const或volatile,因为只有构造完成一个类,才建立常量性
18、限定类对象定义,可以把构造函数声明为私有的

上面是我想起来的,其它的实在想不起来了,请大家补充,如果有错的地方请指正
aperson111 2010-06-12
  • 打赏
  • 举报
回复
收藏学习
wind_breez 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 aladdin_lidx 的回复:]

引用 7 楼 zhang4206 的回复:
主要是因为一个类的对象的虚函数 都需要一个虚表来指向正确的地方, 而这个虚表就是由构造函数来初始化, 你想 要是构造函数也被变成虚的, 那他要使用一个虚表才能调用,而这时虚表还没生出来。。。 就相当于 我现在要养只母鸡,但是没有鸡蛋,母鸡可以产鸡蛋,可是母鸡还没孵出来 是一样的道理。。。


我对虚函数表的理解是,当编译器对当前类进行编译时,根……
[/Quote]
你说的和c++ programming基本一致
suyksuyk 2010-06-12
  • 打赏
  • 举报
回复
re re re
linglongyouzhi 2010-06-12
  • 打赏
  • 举报
回复
这个对应汇编是停机指令
所以遇到出错代码运行到这些地方的时候,程序就直接停下以供调试
[Quote=引用 22 楼 zmlovelx 的回复:]

引用 20 楼 aladdin_lidx 的回复:
我又想了想考官当初问我的其他问题。其中有一个是debug调试下出现的0Xcccccccc是什么意思。
结合刚才这个问题。考虑一下构造函数初始化类对象的过程。
恐怕最最首先要做的就是根据类去计算类对象所需要的存储空间大小,然后分配相应的内存。最后才是一系列的构造任务。
如果构造函数是虚函数,还怎么可能知道需要为对象分配多大的存储空间呢?
……
[/Quote]
nanchangniat 2010-06-12
  • 打赏
  • 举报
回复
看到一楼的回答。
初始化是构造函数最重要的功能
xuanyue 2010-06-12
  • 打赏
  • 举报
回复
受教了
djjlove_2008 2010-06-12
  • 打赏
  • 举报
回复
最主要的还是编程能力,这种题型一方面可以考你的细心分析与总结,但只占人C++的1/100。
  • 打赏
  • 举报
回复
这个面试官不会面试.
shirleyputin 2010-06-12
  • 打赏
  • 举报
回复
没有面试过 。以后我也要面试的。。
CyberLogix 2010-06-12
  • 打赏
  • 举报
回复
这个面试的人是个SB,建议楼住看《深入探索C++对象模型》
加载更多回复(29)

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧