关于《程序员面试宝典》中一道面试题的答案

转载 2012年03月28日 23:32:27

说明:

本文是前段时间发表在CSDN上的文章。后来通读了《程序员面试宝典》,发现里面给出的错误答案很多,所以除非是你特别明确的问题,不要轻易相信其中的结论:)

 

今天一朋友拿着《程序员面试宝典》来和我商量一道题目,以前听说过这本书的大名,一直无缘得见,今日一见,信手一翻,对于求职的程序员来说的确是一本不错的书:)

下面就是朋友谈及的那个问题(括号中的中文是作者翻译的)

 

Tell me the difference in public inheirt and private inheit.

(公有继承和似有继承的区别是什么?)

A.      No difference

(没有区别)

B.      Private inherit will make every member form parent class into private.

(私有继承使父类的所有元素变成私有)

C.   Private inherit will make functions from parent class into private.

(私有继承使父类中的函数转化成私有)

D.      Private inherit make every member from parent not-accessible to sub-class.

(私有继承使父类中所有元素无法与子类联系)

 

书上给出的答案是D,但我认为B才是正确答案。

书上给出的解释是:

A肯定错。

因为子类只能继承父类的protected public,所以B也是错误的。

C的叙述不全面,而且父类可能有自己的私有方法成员,所以也是错误的。

 

由于C++博大精深,本人受学识所限,对于不同方式的继承有如下几点相关的认识:

(希望没有错误,经常发现多年形成的观点,最后竟然发现是错误的)

(1)私有继承:父类中的公有和保护成员成为子类的私有成员;

(2)保护继承:父类中的公有和保护成员成为子类的保护成员,父类中的私有成员在子类中不可访问;

(3)公有继承:父类中的公有和保护成员分别成为子类的公有和保护成员,父类的私有成员在子类中不可访问。

(4)一个类的成员对于其对象而言,公有成员可以访问,保护和私有成员,该类的对象是不能访问。

 

诚然,如书中所给出的解释“因为子类只能继承父类的protectedpublic,所以B也是错误的”,从这个意义上来讲,B的确是错误的。如果这个成立的话,那么这个题目应该就没有正确答案。B的英文正意,我觉得应该是“私有继承会使每个从父类继承而来的成员变成private”,而不是书本上作者给出的翻译,如果这个翻译是正确的,那么B就是唯一正确的答案。

 

从子类的内存布局上考虑,父类的私有成员实际上照样会在子类对象中出现,只是用通常的方法访问不到罢了,但至少有一种办法来访问,即通过指针的方式,即使父类的私有成员,在派生类中也是可以访问到,关于这点可以参考:http://blog.csdn.net/pathuang68/archive/2009/04/20/4096088.aspx

 

D的英文原意应该是“私有继承使得父类中的每个成员都不能被子类访问”,因此严格地说,在上面那篇文章提到的情形下,这是不对的。

 

虽然我认为B是正确的答案,但慑于《程序员面试宝典》的威名,因此不能pretty sure,希望能够得到各位硕学同仁的指教。

【程序员面试宝典】数组相关面试题

1、像素翻转 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩...
  • double_happiness
  • double_happiness
  • 2017年07月02日 20:47
  • 514

程序员笔试面试题总结(不定时更新)

面试:Java开发岗 自己面试了三个多月时间,把经常问到的自己不会或叫不准的问题记录了下来,希望对读者有帮助。问题有点多,也可能有重复的问题,越重复表明面试官越爱问,而且自己卡那的次数相对比较多。面试...
  • tanga842428
  • tanga842428
  • 2016年10月15日 09:44
  • 4014

程序员面试宝典(第五版)里的错误

为了准备找工作,买了本《程序员面试宝典》看看,结果发现这本书里面错漏的地方实在是太多了。记录一下,希望对后来的人有所帮助。 1.184页,“面试官会节和程序对你的思维能力进行考量。”中“节”字写错,...
  • ww1473345713
  • ww1473345713
  • 2016年03月21日 22:58
  • 3878

大数据面试宝典

链接:http://pan.baidu.com/s/1gdzmZL5 密码:pezh   包含内容如下: 面试资源: 程序员跳槽攻略 程序员面试宝典+剑指Offer + 算法10...
  • lulongzhou_llz
  • lulongzhou_llz
  • 2016年05月31日 13:17
  • 4719

《Java程序员面试宝典(第4版)》 试读感想

《Java程序员面试宝典(第4版)》 试读感想         谈到Java程序员面试这个话题,我想,每个从事java开发的人都有一套自己的见解,特别是工作3年以上的。对于学校里将要毕业即将开始找工...
  • chwshuang
  • chwshuang
  • 2015年11月06日 18:11
  • 2781

web前端一道很“坑”的js面试题

f = function() {return true;}; g = function() {return false;}; (function() {if (g() && [] == ![]) ...
  • k358971707
  • k358971707
  • 2017年02月23日 22:28
  • 994

各大名企笔试及面经大全(程序员必读)

能不能进名企,就只看你够不够努力,够不够技巧。 没有成不了的事,只有不够努力的自己! 我要进名企,请先锥刺股!   一、华为 笔试题目 华为逻辑推理题 史上最...
  • ericxu1116
  • ericxu1116
  • 2014年07月07日 17:29
  • 2158

前端程序员经常忽视的一个JavaScript面试题

前言 年前刚刚离职了,分享下我曾经出过的一道面试题,此题是我出的一套前端面试题中的最后一题,用来考核面试者的JavaScript的综合能力,很可惜到目前为止的将近两年中,几乎没有人能够完全答对,并非...
  • bluehire
  • bluehire
  • 2016年02月16日 13:27
  • 441

2017 java程序员面试宝典

转自点击打开链接 1:JDK与JRE JDK:JAVA Development Kit, java开发工具包; 包括各种类库和工具,当然也包括JRE JRE:JAVA Runtime Environm...
  • bigheadyushan
  • bigheadyushan
  • 2017年08月30日 00:09
  • 973

.Net 面试题整理(一)

.Net 面试题整理(一) 好久的资料了,拿出来分享给大家,主要是记录一些面试题整理。Main函数是什么?在程序中使用Main函数有什么需要注意的地方? Q:程序的入口函数!函数名字不能改变;一...
  • vfush
  • vfush
  • 2016年05月22日 21:34
  • 10070
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于《程序员面试宝典》中一道面试题的答案
举报原因:
原因补充:

(最多只允许输入30个字)