饭否回来了

我开始用饭否的时候,Twitter还能正常访问,Facebook也能正常访问。不过大抵那个时候我是没有看出来微博会火起来,当时更看重的是FriendFeed,看到了人们的生活与互联网越来越融合在一起,看到了其实我们在互联网上也有一条生活的线,所以当初提出了“分享快乐,记录互联网人生”,可以方便用户聚合自己在互联网上的轨迹,你在Picasa发布了照片,在新浪博客发表了日志,在FaceFeed都能方便的看到;你想发布一条状态更新,通过FaceFeed可以广播到Twitter、饭否、叽歪上,FaceFeed即是一个对你在各种Web 2.0网站上的行踪的一个聚合器,也可以成为你在互联网生活的一个大广播。同时FaceFeed还提供了手动分享,内容识别的功能,可以提取网页的摘要信息,并提供了对大量网址的识别功能(视频网站、电子商务网站)。

就算是到现在,我也觉得FaceFeed是一个不错的想法,是一个很全面的想法。但是FriendFeed没有成功,TwitterFacebook成功了,饭否在国内的发展,与现在新浪微博相比,新浪微博也要远远胜过饭否(没有看低饭否的意思,仅从用户与影响力上来讲)。饭否始终看起来像是一个Geek玩的东西,新浪微博从“名人”下手,反而把微博做得相当平民化,有时候不得不感慨,在中国的国情下,很多国外成功的产品,不做大量的适应本地化的改变,很难在中国取得类似的成功。

再看校内开心网,校内现在改名叫人人网了,他们并没有复制Facebook在美国以及在全世界的成功,千橡的意图是想做中国的Facebook,但是他们没有做到,人人网在国内的影响力远不及Facebook在国外的影响力,这其中应该还有可以进入的空间,但是必须找出国内造成这种差距的原因,如若不然,即使人人网开心网在国内目前的状态,一般的社交网落也无法超越他们,我暂时还想不到为何国内的局面跟国外会有这么大的差距。

还有另外一点,国外的团购网站,似乎也就只有GroupOn一家独大,国内的团购网站却如雨后春笋般出来,我每天早上做的第一件事情就是删那些团购网站发来的垃圾邮件,有几家确实是我订阅的了,但是大部分邮件是由那些不知名的网站发过来的,不得不佩服国人山寨的能力和勇气。不过也有人从这里看到了商机,开始做团购聚合,我也曾想到过这种思路,但是这种“二道贩子”的作法,又能赚到多少钱呢,不禁令人产生了一些疑问。

Anyway,欢迎饭否回归,希望祖国太平,不要让这个网站再被维护一次了。

2,861 次浏览 | 没有评论
2010年11月26日 | 归档于 Web 2.0, 互联网, 微博

找工作回顾(7):Misc

我想我从头到尾对找工作的回顾差不多了,这篇做个了解吧。再写上一些杂七杂八的感触:

  • 有师兄能帮内推的话,就内推吧,机会相对来说大一些。
  • 尽量提前准备,除非你有十足的把握,早点弄简历,早点复习,临阵磨枪还是很有用的。
  • 多跟同学交流,无论是询问别人向别人取经,还是把自己的经验分享出去。
  • 北邮人的求职版块还是挺好的,起码消息很灵通,推荐用Google Reader订阅那版的RSS。水木上求职广场晒Offer的太多,容易让人受打击。
  • 善用Google Calendar,这绝对是你安排日程的力器,有HR打电话过来约时间,看一眼就知道自己有没有时间了。这个是个称职的个人小秘书,还能在事件提前一段时间发短信提醒你。
  • 养成邮箱即时查收的习惯。我是保证邮件可以在第一时间被我查收到的。
  • 保持手机畅通,不要有停机或者是手机不在身上的事情发生。起码避免不必要的麻烦,也不会给人造成不好的印象。
  • 要淡定。
  • 要坚定自己的信念。

找工作算是圆满的结束了,在这里还要感谢一下我家人、女友、朋友的支持各帮助,自己一路走来,多谢你们的帮助。也希望看到过这个系列文章的同学们都能找到一个自己满意的工作。

3,967 次浏览 | 2 条评论
2010年11月23日 | 归档于 Job Hunting, 未分类

找工作回顾(6):决择

最后我选择Offer,在百度、腾讯、阿里巴巴这三个,职位都差不多,都是软件开发工程师,薪水也差不太多,地点差距很大,北京、深圳、杭州,几乎是从南到北,最后选择了百度,主要还是觉得在我应聘的部门可以得到更多的技术上的积累,当然我并不是说其他两家不能,我想在任何一家公司自己好好干,都可以锻炼自己。只是去百度的话,自己对Linux方面,对C/C++编程方面能够得到更多的锻炼,这是我最希望能做的事情。我不是很纠结于户口,所以也没太考虑这方面的因素,做完了这个决定以后,北京的一些据说肯定有户口的公司我也就没有面。户口并不是我个人找工作的决定性因素。自己主要还是从技术角度和以后的发展来看,我没太纠结啥。不过倒是可以总结一下身边的同学选择Offer的考虑因素:

  1. 公司规模、知名度
  2. 发展前景
  3. 薪水、福利
  4. 加班
  5. 地域
  6. 户口

有这么多需要考虑的因素,这些因素之间又没有一个明显的优先级,当你发现A公司给你更高的薪水但没户口,B公司给你户口但薪水低,你拿了高薪水又不甘心没户口,或者有了户口又嫌自己拿得比别人少,即有户口又有高薪水但是公司的规模不如C公司,这样去选Offer不纠结才怪。我觉得选Offer的时候,一定要有一个中心指导思想,以户口为导向?以岗位为导向?以薪水为导向,认准了一个,在这个维度下再考虑其他的因素。这样就没有啥好纠结的了。多个维度都去同等看待的结果就是最后的Offer看起来都没有明显的综合的优势,也就无从选择了。

我是那种一旦选定,就不再动摇的人,后面的面试我也不面了。去哪家公司我觉得对人的发展有影响,那绝不至于有那么大的影响,自己认准了,认定了,去努力就好。

4,531 次浏览 | 5 条评论
2010年11月23日 | 归档于 Job Hunting

找工作回顾(5):我所经历的那些公司们

盛大,GY帮我内推的,当时没有准备好勿勿忙忙就面了,Java的一些东西也没有准备,项目也没有想好怎么说,止于一面。当时是安慰我说后面还有面试,不过后也也就没有后来了。

创新工场,我自己在网上投的简历,在工场里当场笔试,然后面了两天,一共是5轮。做云计算相关的组,项目聊开了,中间还有被一个外国人面,连说带写,口语也就那么回事儿,反正能交流没问题就成。算法都不难。最后给了offer,创新工场的氛围要看个人喜好了,如果你喜欢那种创业的公司,还是个挺好的选择的。

淘宝,我参加的第一场笔试,感觉笔试成绩应该不错,顺利的接到面试的通知。据说面试有三面,但我只面了一面。面试官觉得我的背景不Match他们的要求,这是我见过的最BT的面试官,居然因为我写了熟练使用Eclipse而问了我一个很不常用的快捷键的组合,而且问的问题都很为难人,像啥你用一句话说一下PHP跟J2EE的区别,面得我很不爽,最后他觉得我前景不符合,我觉得我面的职位我不想去,就Over了。回来之后就告诉了别的同学,还是不要面Java的职位了,他们就是想招人去做J2EE的网站的。反正我对淘宝的两个面试官印象很不好。

搜狗,先是笔试。这家公司效率很高,前一天投简历第二天就通知笔试。可是之后的效率就不敢恭维了。大概断断续续面了一个月。一共三面,各面试的题目也不难,主要是聊项目,问一些跟互联网有关的题目,像大数据处理啥的,我觉得面得挺顺利的。可是后来面完三面之后也就没有后来了。

腾讯,我的简历被深圳那边看中了,电话跟我沟通过三次,算是比较简单的面试,聊项目,问一些基本的技术问题。后来深圳那边的技术总监跑到北京来最后一面,人挺好的,聊项目,聊C++,聊网络。最后给了offer。

微策略,面了一个下午,一共四面,全部是英文,沟通算是比较顺利。问的题目我基本上全都见过类似的或者觉得不难,自我感觉良好。不过没有给offer,很想不明白自己问题出在了哪里。

网易研究院,网易的笔试算是比较简单的,我估计笔试的成绩应该不错,技术面只有一面,大概不到一个小时。二面是HR面,顺利拿到Offer。

阿里B2B,超赞阿里的效率啊,上午笔试,第二天上午通知面试,下午面试,接着第二天发Offer。如果去杭州的话,那里有不少我实习的时候认识的同事,我也很喜欢杭州这个城市。希望自己以后有机会还能去阿里,谢谢叶博跟陈老大。

人人网,我投的是服务器端C++的职位,我很喜欢人人网,可能跟自己以前做过SNS有关,可是去面试的时候给我安排的是Java的面试官,在我的执意要求下,给我安排了C++的面试官。由于一面面C++的面试官没有闲的,所以面我一面的其实是一个C++的二面的面试官,对我对C++的掌握很满意,二面聊得也很开心。这家公司是唯一一家我遇到的会当场夸你面试不错的公司。最后也给了Offer。

百度,百度面得很纠结,可能还是跟自己的背景有关,对方强调Linux/C/C++/Net/分布式方面的能力,自己虽然算是熟悉,但谈不上精通,为了面百度,还特地把APUE和UNP、TCP/IP详解看了看。一共三面,一面二面是技术面,算法、C/C++、Linux、网络、分布式以及项目。三面的面试官面了我足足有2个半小时,谈项目为主,我把我们项目能讲的部分全部都讲了一遍。整个面试过程可能要比我说得更复杂一下。最后拿到Offer,我也决定不再找工作,就去这家公司。因为我觉得部门是我喜欢的部门,做基础架构;氛围也是我喜欢的氛围,以做最优秀的产品,培养最优秀的工程师为目标。希望自己能在这里得到一个好的发展。

Google,2000人参加笔试,96个人进和第一轮面试,我面了两面,很有幸能感受一把Google的校园招聘。即使没有成功,但也觉得这次找工作的经历完整了。Google的题目全是算法、设计题,不问技术细节,不太关心你的项目。这是一家很令人向往的公司。

摩根IT,笔试笔得挺爽的,因为我觉得题目都挺简单,面试比较悲催,电话面试,一个老外,一个中国人,听英语的口音能听出来,十个问题,基本上属于名词解释那种,然后会在这十个问题里抽几个深入的问你,所谓深入,其实也没有多深。只怪自己在电话里的英语实在是差强人意,止于一面。

IBM CRL,我去面试的时候就觉得气场有点不太对,周围的几个参加面试的同学从外貌上看明显比我要苍老,从他们聊的话题也大约能推断的出,他们都是博士,研究院么,本来可能就更希望招博士进来。面试的时间是事先规定好的,只有15分钟,主要是了解一下科研方面的情况,时间很短,要把自己的项目讲清楚,我一直没想明白我的那个面试官为啥纠结于“你们的产品为什么不直接构建在现有的中间件上”,我们就是做中间件的啊~!也止于了一面,不过如果进二面的话,貌似是以讲PPT为主的形式。

爱立信、EMC、完美时空、有道、VMWare的笔试我都通过了,没有去参加面试,因为各种原因吧。找得太累了不想找了,或者是觉得部门不是核心部门。

雅虎、微软没有给我面试的机会。虽然我觉得两次笔试做得应该还都不错。算是个小小的遗憾。

Update 1: 微软面试

Update 2: 搜狗今天(2011年2月28日)给我发了Offer,直接在电话里拒掉了,我就不再考虑了。

4,834 次浏览 | 4 条评论
2010年11月22日 | 归档于 Job Hunting

找工作回顾(4):Java

写了几年的Java,到最后面试的时候,最让我伤心的就是Java,究其原因,平时用得多倒是挺多,文档看得也不少,但是没有深入到语言内部去,还有就是我的项目跟J2EE一毛钱关系都没有。我甚至之后的笔试面试宁愿选择C++来做,因为觉得自己复习C++复习了差不多一个月的时间,也算是比较有深度了。不过吃过亏,也就接着看了关于JVM、内存管理、并发控制、容器,但是越看到最后越觉得,其实面试官问的那些东西也不叫有深度,说来说去,都是一些知识性的东西,我知道与不知道又能怎么样?我不知道看看文档不就知道了,Spring Struts Hibernate啥的给我一段时间我也能弄明白。不过我还是有一堆建议,如果你不得不面这个方向,可以看看。当然,如果你不得不面这个方向,很有可能,你比我更精通Java。

  1. 永远不要说自己精通Java,一定有个面试官会把你面趴下。
  2. 既然说自己用过Java,那么起码对多线程、并发、容器、JVM、垃圾回收啥的,要很清楚很清楚。
  3. 既然说过自己用过容器类,那你起码把这些类的源代码要看一遍。
  4. 其他的一些基本知识你也一定要掌握,我就不一一列举了。
  5. 起码要用过大量的Java框架,似乎这在Java的世界里是个很重要的加分点。嗯,最好把Spring和Struts、Hibernate啥的核心代码都看一遍。
  6. 以及其他的你能想到的,尽量多去看书吧,各种关于Java的书。各种细节,各种知识点。

我倒也没有不喜欢Java,只是真的可能是因为J2EE的东西两年没做过,真的可能没怎么去看过JDK的源代码,所以有些时候显得没有达到面试官的期望吧。

语言其实只是一个工具,面试官问那些其实也是在检验你对这个语言掌握的程度到底有没有到达你说的精通、熟练、熟悉、了解,只要你如实的向面试官说明了你所掌握的与你简历上所写的是一致的就可以了。只是我觉得在各大IT工厂里,对Java的要求可能比我们想像的要高一些,去面试前做好准备好了。

所以到后来,我就美滋滋的做C++的笔试题,美滋滋的面C++的题目,以及美滋滋的想到工作之后可以天天写C/C++。不过为了拿好Java这把枪,我觉得有必要利用业余的时间搞点什么Java相关的项目,android上的或者是j2ee相关的,这还是门挺重要的语言,即使以后用不到,多去了解一门自己本来就熟悉的语言也是好的。

3,731 次浏览 | 1 条评论
2010年11月22日 | 归档于 Job Hunting

找工作回顾(3):面试

面试比较靠人品,有一定的随机性,但是好好准备的话,可以让随机性降低,朝着理想的方向发展。

首先是在接到面试通知的时候,你要确认面试的时间和地点,这个是最重要的。有些面试也可以问一下面试的形式,不过我面的全部都是1v1的,没有群面过,最好能跟通知你的人要一个可以联系到他的电话,以防止特殊情况发生的时候可以提前联系。因为很多公司都是有总机的,你按通知你的号码打过去,未必能打得通。

面试的着装,个人形象还是稍微注意一下。一般的IT公司穿得休闲一些就可以了。微策略、摩根IT这种类型的可以穿西装去,一般的公司穿西装去就显得有些格格不入了。出门之前一定要查好路线。在北京出门最不靠谱的就是打车跟坐公交,所以推荐近的地方骑车去,远些的地方坐地铁去。提前10~15分钟到达,我觉得提前到得太多也不是件好事。

面试的时候每个人都会紧张,但是一般进入状态之后就会好了。最重要的是跟面试官要有一个顺畅的交流,弄明白他要问你的是什么,想清楚自己想要表达的是什么,跟他确认他理解了你的意思。像对自己的个人介绍,自己的项目经历,自己的优点和缺点,这些最好是在面试之前就已经想好了。面试官有时候会问一些你不会的问题,有时候也会把一个问题逐渐问到你答不上来为止。遇到前一种情况,如果真的是一个你不熟悉的领域,比如你一直做C++开发,面试官却问你Spring的实现原理,那你大可以提醒他你不擅长这个领域,把他引导到你熟悉的方向上来。对于后一种情况,我觉得基本上你就说我不会就行了,面试官要么会引导你回答,要么他就是想把你问倒而已。我是个比较保守的人,一般遇到跟面试官有分歧的时候,除非我很肯定我的答案是对的,不然我一般会避免跟他有所争执,你很难保证他面试完你会去再查一下到底是你对还是他对,面对这种情况,我一般还是比较保守的处理了。问及一些软实力的时候,大可不必太谦虚,我觉得我这点就没有做好,面试官一般会认为大家都有“浮夸”的成分,所以即使你诚实的回答了,他也会把你说的内容打个折吧?这样很不划算。面试最理想的状态,就是把你的能力都展现给面试官,让他觉得你可以胜任将来的工作。

有些时候,会被问到一些你做过的题目,我觉得还是诚实的跟面试官说吧,这题目我做过,千万不要装出一副没有做过的样子,他会发觉的。被发觉了也不好。

一般面试快结束的时候,面试官会让你自己问几个问题,这个自由发挥吧,只要别是太雷人的就行。而且也最好别谈跟待遇有关的事情。是否录用你,除非面试官自己说了,最好也不要问。

面试完了之后,就等消息好了。稍微耐心一些,这个时候已经是我们所力所不能及的范围了。

3,073 次浏览 | 没有评论
2010年11月21日 | 归档于 Job Hunting, 校园, 生活
标签: , , ,

找工作回顾(2):笔试

我参加过不少的笔试,除了雅虎没有消息了外,其他的笔试都通过了,包括Google的那次2000人的笔试。我觉得为笔试做准备的大前提是你要确保自己能够收到笔试邀请,有些公司还是会筛简历的,所以在网申的时候一定要认真填,如果人家不给你笔试的机会,其他的也就都无从谈起了。我没有霸笔过,有些公司可以霸笔,有些则不行,这方面我没啥经验。

收到笔试通知,一般的公司都会先用电话通知一下,再发一封笔试邀请的邮件,以防万一,我建议把邮件打印一份笔试的时候随身带着,其他的要准备的东西可以以邮件为主,有些公司会要求带2B的铅笔来涂答题卡,身份证、学生证这种是必带的,最的也带一份简历。

笔试的题目无非以下几种,技术题、智力题、开放性问题。技术题我上一篇准备里已经说了,基本上不会跑出那个范围,好好复习的话,95%的笔试都能通过,另外5%是你运气不好,不要怪自己没答好题目。智力题,这个没法复习,只能平时看一些类似的题目,自己总结一些思路,也不用太在意,你能很容易做出来的,别人也能很容易做出来,你做不出来的,别的人也大部分都做不出来。开放性问题的话,就按自己的真实想法去写吧,我觉得如果认为这种题目有对错的话,那就是在错特错,把自己真实的想法表达出来就好。如果你的价值观不被这个公司认可,那么说明你们二者不合适。不过若是让你写自己的优点啥的,在一定范围以内,可以夸张一点,这个时候千万不要谦虚。

笔试题里一定会有算法题的,就算是Google这样的公司,他的算法题目也不难,我觉得比一般ACM比赛的题目要简单,所以大可不必担心(如果你按我说的复习过算法这方面的知识的话),你只要把你的思路清晰的表达出来即可。现在总结出来的最佳的作法是,在写代码之前,用一段简短的话把思路描述一遍,并且在代码里添加必要的注释,帮助批阅试卷的工程师理解你的思路,这样更容易得分。

另外还有一点,把字练练好吧,我要是批阅试卷的那个人,字迹潦草的那张我肯定没有耐心看的。

一般的笔试还是都比较简单的,不用太担心,写好一份简历,做好必要的准备,一定是可以通过的。

3,059 次浏览 | 没有评论
2010年11月21日 | 归档于 Job Hunting, 校园, 生活
标签: , , ,

找工作回顾(1):准备

找工作陆陆续续忙了三个月,这中间博客都少有更新,去笔试面试回来我也没有写过笔经面经,一是觉得确实参考意义不大,被泄露出来的笔试题基本上不会再考,所谓的面经,现在觉得面试的偶然性很大,别人的经验放在自己身上未必就有用。不过现在基本上尘埃落定了,倒是可以回头来看一看,这接近四个月的时间的经历。经过这段时间,拿到了创新工场、阿里巴巴、网易研究院、人人网、腾讯、百度这几个Offer,

这篇博客是第一部分,讲讲我是怎么准备找工作的。

我觉得找工作的准备分三种,第一种是心理准备,弄明白自己想要找一份怎么样的工作,这一点我在开始的时候就非常明确,我想进入一家互联网企业做技术,这类企业像国外在国内有公司的Google、Yahoo!,国内的百度、腾讯、阿里巴巴,以及新兴的网易有道、搜狗、人人,其他的一些IT公司也可以考虑,像微软、EMC、完美时空等等,但不是我心中的首选。还有就是我不打算做测试,这有感谢我以前在阿里巴巴的实习经历,我当时就觉得测试这活儿不适合我干,我非得天天跟开发吵架不可,我不喜欢挑别人的毛病,我喜欢自己把东西做得尽量完美,但我愿意接受别人的意见。有了这个准备,你就可以避免浪费很多时间,那些不在你考虑范围以内的公司,就不用去参加他们的招聘了,节省双方的时间。

第二种是基础的准备,我觉得首先要把计算机学科的一些基础知识再回顾一下,最重要的是操作系统、网络、C/C++语言、算法与数据结构、数据库。操作系统找本操作系统的书翻一翻就可以了,内存管理、进程调度啥的还是经常会被问到的,I/O方面、进程间通信、多线程啥的也经常被问到。再具体一些,如果有Linux的相关经历,可以把APUE再看一下,起码被问到的时候底气足一些。网络方面,看看UNP和TCP/IP详解,两本好书。算法与数据结构,一是搞好基础,这个可以看算法导论,二是多看一些题目,这个可以去网上搜索,同时要练习在纸上写程序的能力,以及表达的能力;C/C++自然不用说,很多公司都会问一些语言的细节以及底层是怎么实现的,我虽然也不喜欢被问到这些问题,但是多了解一些没有坏处。数据库,其实不是特别重要,会被问问索引、外键、范式啥的,你要是不太了解就说最近没怎么用过了,其实百度官也不会为难你。还有要准备的就是自己的项目,一定要理好思路,把项目从应用场景到架构到实现,到遇到的问题都想明白了怎么说,到了面试的时候才能表达清楚。另外有些外企比较注重英语口语,比如大摩跟微策略,可以提前练练自己的口语,以及对一些计算机基本概念用英语怎么表述。同时,一定要准备好一份像样的简历,这个没有太多经验,我的简历也是经过若干次修改才出来的,我觉得简历一定要诚实,即不夸张也不用谦虚。

第三种准备是笔试面试前的准备,虽然我觉得看面经没有啥帮助,但是可以从侧面了解一下,去面试之前,还是可以稍微看一些,但不要太迷信那些东西。同时也准备好着装,有一个好的精神和身体状态也很重要。我有次去面试闹肚子,回答问题的时候经常面露难色,一定给面试官留下了不好的印象。其实那是我肚子疼的自己在忍着而已。

我觉得把这些都准备得差不多了,就可以去战场上锻炼一下了,不用在乎每一次的成败,其实无论成败你都能学到东西,而且找工作本身就存在着偶然性,所以即要淡定,又要大度,一个萝卜一个坑,你最后肯定能找到那个属于你的你也喜欢的坑的。

3,812 次浏览 | 1 条评论
2010年11月20日 | 归档于 Job Hunting, 校园, 生日

在C++里写一个不能被继承的类(2)

上一篇博客中讲述了一种在C++中实现Final类的例子,但是后来想想那个办法有点绕,其实只要想办法让孙子类无法调用基类的构造函数就可以了,可以有很简单的办法能做到,不需要使用模板呀、友元呀那些比较复杂的机制。具体的代码如下:

只要理解我标红的地方就可以了,把AbstractFinal的构造函数设置成私有的,然后FinalClass以私有虚继承的方式继承AbstractFinal类,这个时候,再有FinalClass的子类就无法调用AbstractFinal的构造函数(对其是私有的),所以也就形成了一个无法被继承的类。

2,776 次浏览 | 没有评论
2010年10月1日 | 归档于 C++, 学习, 技术
标签: ,

在C++里写一个不能被继承的类

这是最近看到的一道面试题,最近是看了不少道面试题,C++里各种变态的问法。这道题算是比较正常的吧。在C++语言里,是没有类似Java里final class的概念的,但是学C++的人心里一定要相信,C++是万能的。于是有人给出了一种解法

代码我在下面再贴一下吧,不过著作权归原作者所有,向原作者表示敬意。

template <typename T> class MakeFinal

{

      friend T;

private :

      MakeFinal() {}

      ~MakeFinal() {}

};

class FinalClass: virtual public MakeFinal<FinalClass>

{

public :

      FinalClass() {}

      ~FinalClass() {}

};

这个方法行不行,行!请注意红色的部分,由于声明了T是友元类,所以可以访问自己的私有成员函数,当然也包括构造和析构函数;但是由于FinalClass是虚继承自MakeFinal,所以当有一个类ChildClass: public FinalClass时,会先调用虚基类MakeFinal的构造函数,由于调用者是ChildClass,所以无法调用。上述代码要是把virtual去调,则可以有ChildClass: public FinalClass,因为普通的继承是由子类调用父类的构造函数,向上调用,ChildClass的父类FinalClass是可以调用MakeFinal的构造函数的,所以这里虚继承是必须的。不然就无法实现一个不能被继承的类。

这个方法有没有局限,答案是有。上述代码第一个红色的部分,只要在支持c++0x标准的编译器里才能编译通过,GCC 4.4就算是加上-std=c++0x也不能通过,因为4.4只是部分支持了c++0x的标准。是不是就不能做出一个在GCC 4.4里可以用的FinalClass了?非也,C++是万能的。嗯,你在friend后面直接加个class后,GCC会报有编译错误,此路是不通的。客官就别试了。

我们定义另一个结构体:

template<typename T>

struct Clazz

{

      typedef T Type;

};

然后把原来的FinalClass略加修改:

template <typename T> class MakeFinal

{

      friend class Class<T>::Type;

private :

      MakeFinal() {}

      ~MakeFinal() {}

};

OK,在GCC里可以编译通过了,并且虚继承了MakeFinal的类是无法再被继承的了,会在编译的时候报错。

小结,其实我们的目的就只有一个,把基类或是基类的基类的构造函数变成私有的。这样子类再继承这个类是,因为无法调用构造函数,就会产生编译时错误,自然也就没有办法继承了。

上述在GCC里能用的办法也不是我想出来的,出处在这里

6,246 次浏览 | 2 条评论
2010年9月13日 | 归档于 C++, Linux