关闭

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

584人阅读 评论(0) 收藏 举报

说明:

本文是前段时间发表在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,希望能够得到各位硕学同仁的指教。
0
0

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:25027次
    • 积分:327
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:29篇
    • 译文:0篇
    • 评论:1条
    文章分类