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

转载 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,希望能够得到各位硕学同仁的指教。

相关文章推荐

C/C++经典面试题总结摘选 C/C++程序员面试宝典(二)

============================================================================== 1.new 、 delete 、 mal...

C/C++经典面试题总结摘选 C/C++程序员面试宝典(一)

=================================================================================== 1. char p[]和cha...

由一道程序员面试宝典引出的问题-printf如何读入浮点数!

在讲这个题目之前,预备知识,讲一下,printf函数,输入参数是读入缓冲区保存,再按照%?的格式从缓冲区中读出数据,并据此格式解释数据。有了这个知识之后,在讲程序员面试宝典上看到一个题:view pl...

【程序员面试宝典】链表相关面试题

1、链表中的第k个节点 题目描述: 输入一个链表,输出该链表中倒数第k个结点struct ListNode { int val; struct ListNode *next; ListNode(i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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