
C++
文章平均质量分 69
zhangshuliai
这个作者很懒,什么都没留下…
展开
-
C++和C语言的一点区别
C++是对C语言的提升,相对C语言C++到底多了些什么?其实,任何C++能完成的功能,C语言都能完成(其它语言未必能完成,比如偏底层涉及到寄存器的,甚至C和C++都无能为力,需要汇编),从功能上来说,二者是等价的。但是一些显而易见的现象是,完成一个功能用C++需要更少的代码(用汇编则是更多的代码)。就以析构函数为例,只要定义一次,在任何地方用到,只需要声明对象,不需要调用析构函数。C语言则需要每一原创 2013-02-21 15:02:02 · 845 阅读 · 0 评论 -
游戏循环到游戏录制
一般的代码是这样的 while(1) { if(PeekMessage(&msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { mainloop(); } } 如果有用户输入,则处理输入,没有则调用mai原创 2014-05-20 22:53:43 · 1329 阅读 · 2 评论 -
cocos2d-x 3.0渲染架构
3.0之前是visit后就draw,而draw是真正的OpenGL操作。也就是说,每访问一个对象,先计算节点的渲染数据,然后马上渲染。因为节点是按树形结构组织的,如果两个父节点p1和p2的深度分别是10和20,c1是p1的子节点,其深度是30,c2是p2的子节点,其深度是原创 2014-05-13 23:25:39 · 8232 阅读 · 4 评论 -
导出python类
以导出类CObject为例 struct CObject { void* m_pData; PyObject* m_pObj; void fun(){printf("CObject::fun()");}; }; 1,定义一个PY结构 struct PY_CObject { PyObject_HEAD; CObject* obj; }; 2,定义构造、初始化、析构函数 s原创 2014-05-04 23:09:34 · 1653 阅读 · 0 评论 -
C++接口的设计——析构函数
接口不应该有实体函数,即接口的所有函数都应该是公共的纯虚函数。不过析构函数应该不应该是纯虚函数呢?如果是非纯虚的虚函数,那函数体要写什么呢?答案是什么都不写,内容为空的函数很不简洁,不爽。那就设置成纯虚函数,很遗憾,编译通不过,因为子类会调用父类的析构函数,父类析构函数指针不应该为空。那就考虑设置成普通函数吧,还可以省去声明,因为C++默认实现析构函数!一个显而易见的问题,当delete接口时只是原创 2013-03-28 11:29:23 · 2310 阅读 · 0 评论 -
代码编写准则
1,禁用复制:对于超过一行的代码或者超过3个词的代码语句,坚决不用复制,除非代码内容完全一样。如果代码块大,又完全一样,可考虑包装成一个函数。复制的危害非常大,由于复制后还要进行局部的修改,很容易失误漏掉,导致bug隐藏很深。 2,凡事要考虑扩展性:对于有可能扩展的地方,如果可能性达到50%,就要考虑扩展。考虑扩展后,比如增加了一个参数,每一处使用都应该用到此参数,而不应该使用默认参数。 3,原创 2013-03-19 09:11:36 · 932 阅读 · 0 评论 -
C++对象内存分布
1,没有父类,没有虚函数。完全和结构体内存分布相同,顺序按照各个成员的声明顺序,需要考虑内存对齐(PS:不同编译器的对齐策略部相同,所以一个dll中声明的对象在外面未必可用,因为类成员访问本质是按照偏移量访问,不同内存对齐方式会导致偏移量不同,解决方法是所有dll产生的对象的访问都应该交由dll导出的函数处理)。空间大小为各个成员的大小之和。 2,没有父类,有虚函数。第一个成员为虚表地址,下面的原创 2013-03-18 11:35:29 · 1066 阅读 · 0 评论 -
关于goto语句的使用
在项目中用到了大量的goto语句,遭到了领导的指责,感觉挺委屈的。 作为一个程序员,在很多地方都看到说要避免goto语句的使用。goto语句如洪水猛兽,其实都误解了goto。滥用goto的确很恐怖,可是合理使用却能够对程序的结构性能有很大帮助。以下简单说一下项目中用到goto的3类地方。 1,多重循环嵌套。这是一个配置文件解析的例子,第一重循环读取文件一定长度的字符串,第二重循环判断读取的字符原创 2013-03-15 18:20:50 · 4194 阅读 · 3 评论 -
驱动程序结构学习
可以把内核看做一个进程,其它进程对内核的系统调用就可以看做进程通信。各个驱动程序从属于内核,可以把驱动程序看做一个对象,因为同一类驱动程序只能有一个,可以用单例模式来实现。抽象驱动定义一个接口,具体硬件的驱动实现这个接口。以文件系统为例,考虑到驱动都是用C语言实现的,以下用C语言描述。 1,抽象驱动中定义文件结构体(简单起见,函数的返回类型和参数都是void):保护两个函数变量(是不是很像C++原创 2013-02-22 19:29:31 · 879 阅读 · 0 评论 -
关于C++引用的一些分析
int a; int c; int &b=a; b =c; ++b; 上面的语句等于下面的语句: int a; int c; int *pb;pb =&a; pb =&c; ++(*pb); 可见, 1,首先引用必须初始化; 2,引用也占用空间,和指针一样; 3,指针可以指向任意处,而引用必须指向有实际对象处,然而当此对象析构后,引用仍然会指向无效地址; 4,综上,引原创 2013-02-22 10:03:13 · 868 阅读 · 1 评论 -
wxPython结合cocos2d-x开发编辑器
1,窗口嵌入的问题,可以自定义一个wxEGLView并导出,这个view就是cocos2d-x使用的view,然后遍历整个已经建好的wxPython的窗口句柄,找到根句柄直接SetParent(),窗口就嵌入了。 2,游戏窗口渲染的问题,由于上一步的view已经加入窗口树,并且设置了消息处理函数,所以点击事件可以正常处理。如果要处理渲染,可以定义一个wxAppDelegate继承wx::wxAp原创 2014-12-20 20:06:51 · 1206 阅读 · 1 评论