雪灾、藏独、火车脱轨、地震……
但愿不会再发生什么不幸的事情。但愿ZF能真正为老百姓做点实事。
雪灾、藏独、火车脱轨、地震……
但愿不会再发生什么不幸的事情。但愿ZF能真正为老百姓做点实事。
好久没更新了。
上个礼拜有一位智者走了,他就是柏杨。我知道柏杨还是在读了他的那套白话版的资治通鉴之后(虽然到现在还没看完)。不过柏杨最著名的书也许还是那本《丑陋的中国人》吧。
我对柏杨的大多数观点还是同意的,而且我更加举双手赞成的是:中国人的丑陋跟中国人的苦难是分不开的。如果要评一个,人类文明史中,幸福指数最低的民族,中华民族也许首当其冲。
本来想多说一点,后来想想还是算了。这牵扯到政治,不提也罢。
呃,好久没更新C++了,不过也快更新完了。说实话,我对于泛型编程(GP)也不是很了解,除了用STL之外,自己很少去写模板。模板类的用户,通常是应用程序员。也许对于写底层库的程序员来说,泛型编程才会经常接触吧。
实现自己的模板(template)
类模板成员函数的定义语法:
template <typename elemtype>
BinaryTree<elemtype>::BinaryTree(const BinaryTree&){}
//BinaryTree是类名,在前面加了BinaryTree<elemtype>::作用域后,后面的都不需要再加了
正确编译模板类的方法:
1、因为模板实例化需要看到模板的定义,而不仅仅是声明。所以模板类的定义全部放在头文件中。这种叫做包含编译模型(见C++PRIMER p543)。
当然,可以在头文件中的最后包含源文件,这样可使得定义和声明分开。不过工程中就不能添加这个.cpp了,因为这个.cpp编译通不过。其实就是在头文件的最后include进去就可以了。
2、分开头文件和源文件,在main中包含源文件
3、使用分别编译模型,export关键字目前VC不支持。
喷神James最近在网络上很火,这个老美以喷游戏为主,辅助的再喷喷电影。
此君尤以喷一些烂游戏(直翻应该叫做屎游戏)最为擅长,每每喷到高潮,真是让我忍俊不禁。因为喷神让我觉得确实喷出了玩家的一些心声。
大学的时候,我也玩过不少烂游戏,虽然这些游戏烂得让我想吐,但是我同样强忍着恶心坚持着通关。为的啥?因为我想看看,这个破游戏到底能屎到什么程度。
不过,我到是觉得,作为一个游戏设计人员来说,玩一点烂游戏也是很有好处的。通常,这可以让你避免设计出一个烂游戏。
呃,that's it,今天好像没有什么内容。 广告一下:有中文字幕的喷神James系列可在FZ222下。
编程语言当中,C、C++、非托管状态下的C#都会产生内存泄露。说起来内存泄露也很简单:用了new或malloc,没有用delete或free释放,就会产生内存泄露。举个例子:
{
……
Object * XXX = new Object;
……
}
oops,内存泄露了。退出这个语句块后,无法再通过XXX指针访问它所指向的堆内存,而object对象所占用的内存就无法被释放了。(当然程序关闭后,OS是会负责回收的)
老虎也有打盹的时候,程序员总有YY的时候,工作当中可能一个杂念也许就会让你忘记delete。
如果程序越写越复杂,内存泄露越来越多,手工是很难找到内存泄露的,用VS的内存地址去查看也很费时。所以借助外部工具是个不错的选择,boundschecker就是一个用于检测内存泄露的软件。
具体的用法就不说了,软件中有附带说明文档。我自己的感觉是这个软件的检测,有点宁可错杀1000,不可放过1个的感觉。当然,有总比没有好,有这么个工具还是方便了许多。
最后吼一句,YD优化真是个苦活。
最近入手了PX100,花了260,这样森海适合听音乐的入门级耳塞和耳机总算是都有了。
虽然这两款都是音乐入门级的,但对我这样的音乐门外汉而言带来的无疑是两次震撼。换过耳机之后,再听以前已经感觉不好听的歌,都会有一些质的变化。其实那不是音乐破,而是听的东西太戳了。
MX550是一个适合听流行的耳塞,偏重高音,女声很赞,甚至能听得出性感的味道。而PX100则是一款低音极其震撼的耳机,适合听摇滚。这几天在听Avril和LP的一些老歌时,强劲的低音从耳机中奔涌而出,那些听腻了歌让我感觉像是第一次听一样。
从数值来讲,PX100失真度只有0.1%,肯定要强于MX550。但是MX550只有16欧姆的阻抗,所以对于推力小的MP3来说,更易推。
MX550和PX100都是比较适合PSP的,以PSP的硬件解码实力,300以下的耳机或耳塞足以。即便配再好的耳机,PSP也发挥不出威力。就好比将一辆法拉利放在菜地里跑一样。
最后再赞一下德国人的东西,再看看现在的国货,差距啊……
连续几周贴了C++的东西,这周稍微缓一缓。写一篇PSP阅读PDF的心得。最近公司让我们开始学C#,甚爽,现在连上下班的时间也抱着PSP不放看《C#入门经典》。哈哈,总之现在的工作让我觉得非常开心,即便是偶尔的加班也会觉得非常有趣。
这篇东西是我自己在用PSP看PDF时,总结出来的一些经验,目前已经可以做到从网上下来的任何PDF都可以阅读。
转换软件用Adobe Acrobat 7.0以上,PSP阅读软件推荐Bookr。
首先说明的是,PSP是否可以读取,跟PDF文件的大小没有任何关系。根据PDF文件的两种情况:
1、普通的文字居多,黑白图的PDF,若无法读取,则尝试将其打印,将打印生成的PDF拷入记忆棒,此时就能读出。如果是图片居多的话,这一种方法基本不会改变PDF文档的大小。若是文字居多的话,会少量改变PDF的大小,但是绝不影响阅读。
2、彩色图片居多的PDF,若无法读取(一般是那些彩页无法读取),则尝试使用Acrobat的“高级”->PDF优化器。
图像一栏彩色图像可选择“平均像素采样至”-75-112-jpeg-中,这几个选项,保存后生成一个压缩后的PDF,拷入记忆棒。若还不能读图片,则继续将上述数值像素采样的75-112继续改小,jpeg的质量保持在中。因为PSP无法读取大容量的图像,改小即可。
做优化的时候,如果文件很快生成,实际上就没有优化,拿到PSP上仍旧读不出。如果文件生成较慢,则真正做了优化。优化过的PDF文件有可能比源文件还大,但是如果确实做了优化,即便超过100M,PSP仍旧是能读的。另外,图片精度虽然有被压缩,但是实际上拿到PSP上感觉其实并不明显。
总结:
因为PDF格式字库问题而无法阅读的,使用方法1。
因为图片大而无法阅读的,使用方法2。
说到OOP的继承,让我想起了大学时代,老师教的C++是这样告诉我们的,类成员有3种属性,类的继承方式有3种属性,这样3X3继承而来的成员就有9种情况,要想法记住。当时我就在想,继承这东西怎么会这么混乱。看了一些老外写的C++书并结合工作时的实践,我渐渐明白了,原来丫的根本没那么复杂。
所谓继承,99%的情况下都是使用Public,因为Public继承代表了一种 is a kind of。余下的1%可能使用pivate继承,但是它代表的是根据某物实现出的关系,所以private继承可以用public继承+复合(就是类成员)来取代。至于protected继承,那是什么破玩意!
牢骚发完了,继续。
多态和动态绑定只有在使用指针和引用时才能发挥。使用虚函数实现动态绑定,静态成员函数无法被设为虚函数
protected可以被派生类取用,除此之外不能取用protected成员,就像private一样。
使用派生类时不需要刻意区分“继承而来的成员”和“自身定义的成员”,两者的使用完全透明。
类成员和类的关系:has-a,基类与继承类之间的关系is-a kind of,对象与类之间的关系is-a
所谓继承体系:即由最抽象的部分推演至最明确的部分。
纯虚函数,将虚函数赋值为0。函数纯虚函数的类叫抽象类。因为纯虚函数没有函数定义,所以它的接口不完整,因此抽象类无法产生对象。抽象类只能用于派生,而且只有当派生类为其纯虚函数提供明确的定义,它的派生类才能产生对象。
凡基类定义有虚函数,应该将其析构函数也定义为虚拟。对于抽象类的析构函数,不建议定义为纯虚拟的析构函数,只要提供一个空白定义的虚函数即可。