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

说明:

本文是前段时间发表在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值