- 博客(47)
- 资源 (4)
- 收藏
- 关注
原创 前置声明和Include以及预编译头
今天研究了一下前置声明和预编译头的东西,归纳几点东西使用原则:尽量在cpp文件里包含头文件1、头文件中能用前置声明的不要用Include,尽量在cpp中包含头文件。大型工程最好做个Prerequisites.h,把所有类型前置声明在一起,防止头文件的重复包涵。2、预编译头文件放那些大多数cpp都会包含的而且不是经常改动的头文件。前置声明 && include
2011-12-20 15:18:35
1179
原创 3DSMax8.0SDK在VS2005下运行
看了好几天Max导出插件,实在是找不到自己想要的东西,没办法,昨天下了一个完整Max8,想看看完整SDK里的例子。但是发现这些东西在VS2005下居然运行不起来。郁闷。上网百度,发现有位仁兄也遇到这类问题并已经完美解决了。在这里先行谢过并保存之以备后用。到了解决方法,具体步骤如下:1.进入../3DSMax8SDK/howto/3dsmaxPluginWizard。2.以文本编辑器的方
2011-04-28 16:19:00
1125
原创 一些软件设计的原则
以前本站向大家介绍过一些软件开发的原则,比如优质代码的十诫和Unix传奇(下篇)中所以说的UNIX的设计原则。相信大家从中能够从中学了解到一些设计原理方面的知识,正如我在《再谈“我是怎么招聘程序”》中所说的,一个好的程序员通常由其操作技能、知识水平,经验层力和能力四个方面组成。在这里想和大家说说设计中的一些原则,我认为这些东西属于长期经验总结出来的知识。这些原则,每一个程序员都应该了解。但是请不要教条主义,在使用的时候还是要多多考虑实际情况。 其,下面这些原则,不单单只是软件开发,可以推广到其它生产活动中
2011-04-25 09:37:00
755
原创 转:Fix Bug的五个阶段
一个非常严重和困难的bug,能够成就一个饱经沧桑深受压力的有经验的专业程序员的职业生涯。经受这种考验的创伤程度,相当你受到了一次严重的身体伤害,离婚,或是家庭成为的离世。 研究人员在研究了计算机编程心理学后,得出了一个程序员们在解决一个困难的bug时的心路里程。这些不同的境界,很像为大众所知的Kübler-Ross Stages of Grief(这个模型描述了人对待哀伤与灾难过程中的5个独立阶段(否认,愤怒,耍赖,抑郁,接受)。绝症患者被认为会经历这些阶段),而且原因都很相似。就好像死亡所伴随的悲伤一
2011-03-29 09:43:00
785
转载 3D MAX SDK Mesh类
<br />1、要从一个INode中获得Mesh对象,首先应该从INode中获得Object对象,然后再转成Mesh对象。<br />2、Mesh 中的数据保存在不同的数组中,常用的包含以下几种:顶点位置信息,颜色信息,法向量,UV坐标,MapChannel信息等。其中法向量的信息不是特别的准确,需要考虑平滑组,面法向量与顶点法向量的差异等。MapChannel用于仅仅有多层纹理贴图坐标的情况,在只有一层纹理坐标的情况下则不需要考虑,使用UV坐标就足够了。<br />3、Mesh中的numVerts变量标记
2010-07-23 18:21:00
1704
转载 阿里软件资深架构师谈:开发者的人品问题
<br />程序员都知道:绝大多数编程中的问题,最终都是自己的人品问题。当遇到奇怪的问题时,我们总是喜欢怀疑系统、怀疑编译器、怀疑网络、怀疑硬件……就是不愿意怀疑自己的人品。熬过几个不眠之夜后,最终还是发现自己的代码存在人品问题。只有极少数的情况才是系统的问题。<br />同样,一些程序员在职业发展中遇到问题时,也总是喜欢怀疑公司不好,怀疑战略有问题,怀疑流程制度不合理,怀疑老板和同事……就是不愿意怀疑自己的人品。<br />在大大小小的IT企业中,总能看到一些技术并非最顶尖的程序员做成大事的例子,
2010-06-09 10:55:00
772
2
原创 说服他人的5种技巧
硅谷传奇创业者+精神领袖 Guy Kawasaki最近写了一篇新文章总结了以下5种说服他人的技巧。希望对大家对付老外有帮助。摘要如下: 先给予,后索取 (Be the first to give )。研究表明,我们容易被给我们帮过忙的人说服:有些服务员给我们结账的时候带来口香糖,我们一般给他们的小费多些。工作中我们更倾向于给帮助过我们的人更多支持… 不要给对方太多选择 (don’t
2010-05-24 13:37:00
808
原创 程序员能力矩阵 Programmer Competency Matrix(转)
注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识。 计算机科学 Computer Science 软件工程 Software Engineering 程序设计 Programming 经验 Experience 学识 Knowledge
2010-04-24 13:35:00
759
原创 Ogre 中将Texture转成本地任意格式图片
bool _saveTextureToLocal(Ogre::TexturePtr texPtr, const Ogre::String& fileName) { Ogre::HardwarePixelBufferSharedPtr tmpTexBuf = texPtr->getBuffer(); int width = texP
2010-04-21 16:19:00
1999
原创 堆和栈(转)
堆(heap)和栈(stack)是C/C++编程不可避免会碰到的两个基本概念。首先,这两个概念都可以在讲数据结构的书中找到,他们都是基本的数据结构,虽然栈更为简单一些。在具体的C/C++编程框架中,这两个概念并不是并行的。对底层机器代码的研究可以揭示,栈是机器系统提供的数据结构,而堆则是 C/C++函数库提供的。 具体地说,现代计算机(串行执行机制),都直接在代码底层支持栈的数据结构。这体现
2010-04-21 14:25:00
536
转载 Dunbar's number
Dunbars number 被认为是个体能够和周围的人维持稳定社会关系的理论上限值,而这种社会关系是指群体中的人相互认识并且知道其他人之间的关系。这一理论的支持者声称,当一个群体的规模超过了Dunbars number的话,就需要更多法律,政策,规则去维持群体内稳定的凝聚力.Dunbars number并没有一个精确的值,但150被认为是非常接近的.Dunbars
2010-04-15 15:57:00
2315
原创 转:七个受用一生的心理寓言
(一)成长的寓言:做一棵永远成长的苹果树 一棵苹果树,终于结果了。 第一年,它结了10个苹果,9个被拿走,自己得到 1个。对此,苹果树愤愤不平,于是自断经脉,拒绝成长。第二年,它结了5个苹果,4个被拿走,自己得到1个。“哈哈,去年我得到了10%,今年得到 20%!翻了一番。”这棵苹果树心理平衡了。 但是,它还可以这样:继续成长。譬如,第二年,它结了100个果子,被拿走90个,
2010-04-12 20:10:00
550
原创 神奇的“const”
const 是C语言里的一个很重要的关键字,其作用是限定一个变量不应该被改变,一定程度上能提高程序的健壮性,为什么说它神奇呢?因为const可被施加在任何作用域内的对象、函数参数、函数返回类型以及成员函数本身,如此多的用法经常闹乱,今天决定好好组织一下留做备用。 先来个简单的,修饰变量的: char test[] = "test const"; const char *p = t
2010-04-09 17:43:00
573
原创 转:向乔布斯学习设计理念与用户体验
本文摘译自 Wired.com(Wired 杂志网络版)的执行主编 Leander Kahney 于今年上半年出版的《Inside Steves Brain》一书。刊发在了《环球企业家》杂志7月5日出版的 15周年特刊上,我们试图通过 Kahney 描绘的这些片段,来了解乔布斯究竟如何工作。 更多apple可以查看 apple4us 。 一个可以有两次生命、两次带领科技业革命的人,
2010-04-09 10:17:00
1505
原创 /Zm(指定预编译头的内存分配限制)
Visual C++ 编译器选项 /Zm(指定预编译头的内存分配限制) 更新:2007 年 11 月 确定编译器分配的用于构造预编译头的内存量。/Zmfactor 参数 factor一个比例因子,确定编译器用于构造预编译头的内存量。factor 参数是编译器定义的工作缓冲区的默认大小所占的百分比。factor 参数的默认值是 100
2010-04-09 10:05:00
2026
原创 拷进去,拷出来——拷贝对象是STL的方式
当你向STL容器中添加一个对象的时候,进入容器的是你指定对象的拷贝;同样,当你从容器获取一个对象时,你所得到的对象不是容器里面的那个对象,而是那个对象的拷贝。一旦一个对象进入一个容器,以后对它的拷贝就多了。比如你从vector、string或deque中插入或删除元素,现有容器的元素就会移动(拷贝);如果使用了排序算法对象也会移动(拷贝)。因为这些拷贝的存在,问题也就出来了:
2008-11-23 17:59:00
787
原创 string 中字符的大小写写转换
toLowerCase(std::string &str){ std::transform(str.begin(), str.end(), str.begin(), std::tolower);}toUpperCase(std::string &str){ std::transform(str.begin(), str.end(), str.be
2008-11-18 15:10:00
734
原创 std::string实现全部替换功能
想把"/n"换成"//n"怎么办?因为std::string并未实现替换所有子串功能,故封装一个函数void StringReplace(string &strBase, string strSrc, string strDes){ string::size_type pos = 0; string::size_type srcLen = strSrc.size(); string
2008-07-15 16:36:00
19986
原创 梦想与现实有多远
从换了新的工作,好像一切都变了。以前每天6点准时下班,着急把火往家跑——为了饥肠辘辘的肚皮。当然那个时候老婆也在家。现在每天正常加班到9点。等到家了都快10点了,老婆也工作,他也要10点回家,她比我辛苦因为她还要早起。没办法我也不想这样,可是以我目前的能力我只能选择让她也工作。而且我早就说过,我不想让她整天无所事事在家里玩游戏,我怕这样我们会没有了共同语言——一个脱离了社会的女人我觉得很可怜。可是
2008-06-16 21:16:00
1021
3
原创 ifstream与ofstream
在程序设计中,数据输入/输出(I/O)操作是必不可少的,C++语言的数据输入/输出操作是通过I/O流库来实现的。C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。在进行I/O操作时,首先是打开操作,使流和文件发生联系,建立联系后的文件才允许数据流入和流出,输入或输出结束后,使用关闭操作使文件与
2008-05-22 20:43:00
7908
6
转载 世界第一张互联网虚拟大脑结构图
前言:经过近一年的努力,我们详细探讨了互联网进化规律,并最终绘制了世界第一张互联网虚拟大脑结构图,我们相信这一推论将对预测互联网下一步的发展动向以及研究人类大脑的组织结构都会起到重要作用。从威客理论到互联网进化论再到互联网虚拟大脑理论,它们将成为真正属于中国的互联网理论。 作者:刘锋,彭庚,刘颖 原创转载或引用请标明作者 在互联网繁杂混乱的现象背后,有两个问题始终摆
2008-05-12 14:28:00
1512
原创 虚函数表(vtbl)和虚表指针(vptr)
上一篇文还留了个问题没解决呢:就是关于那个虚函数指针的问题。其实这样称呼这个指针是不正确的,他确切的应该称为“虚表指针”。不废话了直接进入正题吧。当类中有虚函数的时候,编译器会为类插入一个我们看不见的数据并建立一个表。这个表就是虚函数表(vtbl),那个我们看不见的数据就是指向虚函数表的指针——虚表指针(vptr)。虚函数表就是为了保存类中的虚函数的地址。我们可以把虚函数表理解成一个数组,数组
2008-05-08 15:42:00
9760
1
原创 C++类的大小——sizeof()
先看这么个问题——已知:class CBase{ int a; char *p;};那么运行cout这个应该很简单,两个成员变量所占的大小有嘛——8。可由时候人就是爱犯这个错误:这么简单的问题人家会问你?再想想……好像C++类里面有个什么函数指针,也应该占字节吧!?什么指针来着?忘了(还是水平低不扎实)!流汗中……算了姑且认为是构造函数和析构函数吧。一人一个加上刚
2008-05-08 14:54:00
14332
7
原创 面试中常见的十个问题
从毕业到现在工作做快两年了,但是因为开始找工作挺顺利的,所以我的面试经验并不多甚至可以说是没有什么面试经验。找实习公司时候因为是小公司,所以就是技术问了些问题,觉得凑合就把经理找来了,经理也没问什么问题,因为他公司小要招人而我们要找实习要钱不多又能给他干活所以谈了谈钱其实应该是说他给开了个价我觉得实习不少了就同意了。然后就干了一年。后来朋友推荐去了另一家公司,因为朋友关系和有Deom所以技术根本就
2008-05-08 13:15:00
2529
原创 关于析构函数
声明:本文内容来源于网络。对原文稍加整理。主要对析构函数的知识以提问的方式进行叙述。Q1:析构函数是干什么的?A1:析构函数用来释放对象所分配的资源。举例来说,Lock 类可能锁定了一个信号量,那么析构函数将释放该信号量。最常见的例子是,当构造函数中使用了new,那么析构函数则使用delete。Q2:对象的析构顺序?A2:与构造函数相反,先构造的后析构。如:一个对象数组构造顺序是0
2008-05-07 11:11:00
805
原创 关键字:mutable
学了这么长时间的C++了,还是第一次知道还有这么个关键字,真是惭愧之极。一个类的成员函数如果声明为const,比如int CXX::getValue() const;那么这个函数里面是不可以改变成员变量的值,并且这个函数里面也只能调用声明为const的其他成员函数。如果在这种情况下你想改变某一个成员变量的值,那么就要把这个成员变量声明为mutable。C++真是博大精深啊
2008-05-06 22:17:00
629
原创 STL 基础
STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的。容器和算法通过迭代器进行无缝相连。1、容器种类: 1)向量(vector)可以用常数时间访问和修改任意元素,在序列尾部进行插入和删除时,具有常数时间复杂度,对任意项的插入和删除就有的时间复杂度与到末尾的距离成正比,尤其对向量头的添加
2008-05-06 21:45:00
646
原创 vector与list区别
vector为存储的对象分配一块连续的地址空间,因此对vector中的元素随机访问效率很高。在vecotor中插入或者删除某个元素,需要将现有元素进行复制,移动。如果vector中存储的对象很大,或者构造函数复杂,则在对现有元素进行拷贝时开销较大,因为拷贝对象要调用拷贝构造函数。对于简单的小对象,vector的效率优于list。vector在每次扩张容量的时候,将容量扩展2倍,这样对于小对象来说,
2008-05-06 20:44:00
4566
3
转载 C++堆栈概念
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)
2008-05-06 13:02:00
1421
2
原创 虚析构函数的作用
析构函数对于C++程序员来说应该都是很熟悉的。但是当有人问起我虚析构函数的作用的时候我茫然了,突然才发现虽然C++用了这么长时间,原来自己的底子是如此的不扎实。故此开辟出新的一个专栏决定重新认识一下C++。今天就从这个简单问题入手——虚析构函数的作用。一般来说我们在析构函数里做的最多的事情就是释放指针,内存回收等工作。那么问题来了。当我们用到类的继承的时候我们一般都会把析构函数作成虚析构。
2008-05-06 11:28:00
2575
4
原创 深入理解 void*
“void”是C/C++语言中最常见的一个关键字,并不是所有学习C语言的人都能完全了解它的使用方法和技巧。void字面意思是无类型;void*就是无类型指针,void*可以指向任何类型的指针。众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。 例
2008-04-29 15:54:00
743
原创 初步认识Irr引擎
1:SDK目录结构总述当您下载Irr引擎SDK解压缩之后,你会看到以下文件夹:/bin完全编译好的Irrlicht,DLL以及一些编译好的Demo,你可以通过这些例子来获取Irr的运行状态。(Windows Only)/doc Irr引擎的一些文档。/examples使用C++编写的例子,告诉用户如何使用Irr引擎。/examples.net使用.NET语言编写的例子,告诉
2008-04-10 10:26:00
1787
原创 Irrlicht Engine 相关信息——一些常见问题和解答
1:Irrlicht引擎是什么?Irr引擎是一个高性能,跨平台,开源的3D引擎。它能够帮助你进行实时3D程序的开发。它的主要目标是:方便使用,运行速度快,可扩展,线程安全。这个引擎是一个非常灵活的引擎,可以使用它编写许多不同的应用程序。例如:复杂的3D仿真应用程序,第一和第三人称室内或室外射击游戏,策略游戏,2D游戏等等。2:我能够在不开源的商业程序中使用这个引擎吗?
2008-04-09 14:22:00
1798
原创 脚踏实地
上学时曾经很雄心勃勃的要写出自己的游戏引擎,那时候的我们大有中国游戏引擎的未来舍我其谁的架势。由于对游戏引擎的不了解甚至可以说是无知以及大学生惯有的懒散导致了还没正式开始就不了了之。由于毕业找实习的第一份工作是进行2D游戏的开发以及后来工作的原因了一直没有机会接触3D的开发。本身固有的懒惰也使得自己在学校学习的3D基础的东西逐渐荒废掉。一直想重新拾起来可以自己还是依然很自负的想要写出自己的引擎
2008-04-09 14:11:00
554
原创 编写系统托盘程序
系统托盘程序很常见,最常用的杀毒软件几乎全是这样的。平时在其他程序运行时为了不干扰其他前台程序运行并不显示没用的窗口,只是在任务栏上显示一个程序图标表示该程序正在后台运行。有时候我们也需要编写这样的程序。 要完成这样的程序我们需要做一下3步: 1、设置主边框窗口风格和扩展风格。:PreCreateWindow(CREATESTRUCT& cs){ // TODO: 在此添加专用代码
2008-01-29 18:14:00
651
原创 创建单实例程序
我们在平时写程序时经常要做到在本地只能运行单实例程序,其实在VC里面很简单(这里不是说的设计模式的单实例)只要InitInstance(){ //添加行 HANDLE m_hMutex=CreateMutex(NULL,FALSE, m_pszAppName); if(GetLastError()==ERROR_ALREADY_EXISTS) {
2008-01-29 17:39:00
708
原创 CStdioFile类学习笔记
CStdioFile类的声明保存再afx.h头文件中。CStdioFile类继承自CFile类,CStdioFile对象表示一个用运行时的函数fopen打开的c运行时的流式文件。流式文件是被缓冲的,而且可以以文本方式(默认)或者二进制方式打开。CStdioFile类不支持CFile类中的Duplicate、LockRange、UnlockRange函数,如果你使用了,会得到CNotSup
2008-01-28 17:25:00
780
1
原创 最近有点懒
最近不知怎么了,心理上很懒惰,什么也不想干。前些日子跟朋友伟大的创业冲动不知道跑到哪里去了。本来很快应该完成的工作也一拖再拖还没有做完。 我所在的公司终于继退市之后又进行了一项重大变革,大举裁员退出了门户网站的争夺。两个月前作新员工培训的时候还信誓旦旦宣称的第五大门户网站就这样说没就没有了。虽然对我来说此次的变革跟我没有太大的关系,但是看着公司的前途一片迷茫心理也不免
2007-11-30 16:37:00
615
原创 显示真彩色工具条图标
最近写个程序,想更换一下难看的系统工具条,可是VC里面只支持16色的工具条,看了很多网上的帮助,终于搞定了。对于一个大牛程序员来说这 可能很小儿科,可是毕竟咱们不是大牛嘛。所以写出来以此留念。 CImageList imageList; CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP2); //I
2007-11-30 16:21:00
825
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人