版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,补充(三)宏 编程 #define 仅是简单替换,而不是作为一个量来使用。,4,简单函数的定义,#define MAX(x, y) (x) (y) ? (x) : (y) 定义简单的函数,便于调用。 注意括号的使用。 不同于inline类型的函数。 仅是简单替换,编译阶段,不检查语法;,5,单行宏的定义,定义单行宏,有下列三种方式: 前加#或后加#,将标记作为一个合法的标识符的一部分。注意,不是字符串。例如: #define A(x) T_#x 则 int A(1) = 10; / 等效于int T_1 = 10; #define A(x) Tx#_ 则 int A(1) = 10; /
2、等效于int T1_ = 10; 前加#,将标记转换为相应的字符,注意:仅对单一标记转换有效。如:#define B(x) #x 则B(a)即 a,B(1)即 1。但B(abc)无效。 前加#,将标记转换为字符串。如: #define C(x) #x 则C(1+1) 即 “1+1”。,6,多行宏的定义,#define DECLARE_RTTI(thisClass, superClass) virtual const char* GetClassName() const return #thisClass; static int isTypeOf(const char* type) if(!st
3、rcmp(#thisClass, type) return 1; return superClass:isTypeOf(type); virtual int isA(const char* type) return thisClass:isTypeOf(type); static thisClass* SafeDownCast(DitkObject* o) if(o ,注意斜杠的使用,最后一行不能用斜杠。,7,条件编译的定义,#ifndef _AAA_H #define _AAA_H /c/c+代码 #endif 可根据编译条件选择不同的程序代码执行。 可嵌套定义。,8,宏定义举例(一),#d
4、efine MAKE_COMPONENT( C )( (IW3D#C*)MakeComponent( #C ) ) 则,IW3DScene*pScene = MAKE_COMPONENT( Scene );将被理解为: pScene = (IW3DScene *)MakeComponent(Scene);,9,宏定义举例(二),#define IMPLEMENT_COMPONENT( I, C ) static IComponent* Component_Factory_#C() return new I; ComponentInfo Component_#C = #C, Component_
5、Factory_#C ;,10,宏定义举例(三),#define SINGLETON_COMPONENT( I ) private: static I* ms_pSingleton; public: static I* GetSingleton() return ms_pSingleton; void SetSingleton() ms_pSingleton = this; void Release() ms_pSingleton = NULL; IComponent:Release(); ,11,宏定义举例(四),#define IMPLEMENT_SINGLETON_COMPONENT(
6、I, C ) I*I:ms_pSingleton = NULL; static IComponent* Component_Factory_#C() if( I:GetSingleton() ) return I:GetSingleton(); I* pCom = new I; Assert( pCom ); pCom-SetSingleton(); return pCom; ComponentInfo Component_#C = #C, Component_Factory_#C ;,12,宏定义举例(五),#ifdef _DEBUG #define UNDER_MEMORY_MGR( C
7、) void*operator new( unsigned int size ) charszFile256; strcpy( szFile, _FILE_ ); strcat( szFile, - ); strcat( szFile, #C ); return GlobalMemory.Alloc( size, szFile, _LINE_ ); voidoperator delete( void* ptr ) _MemFree( ptr ); #else #define UNDER_MEMORY_MGR( C ) void*operator new( unsigned int size )
8、 return _MemAlloc( size ); voidoperator delete( void* ptr ) _MemFree( ptr ); #endif,13,宏定义举例(六),#ifdef _DEBUG #define CHECK_PTR_RETURN( ptr ) if( NULL = (ptr) ) Assert( 0 ); return FALSE; #else #define CHECK_PTR_RETURN( ptr ) if( NULL = (ptr) ) return FALSE; #endif / #ifdef _DEBUG,14,宏定义举例(应用),class
9、 IComponent public: UNDER_MEMORY_MGR( IComponent ); IComponent():m_nReferenceCount( 0 ) / / IComponent() / protected: virtual IComponent() /IComponent private: intm_nReferenceCount;/ Reference counter . friend void_ComponentReference( IComponent* pCom ); friend void_ComponentRelease( IComponent* pCo
10、m ); ; /class IComponent,15,宏定义举例(应用)Contd.,class IW3DWorld: public IComponent public: virtual voidRemoveMonster( DWORD dwId ) = 0; virtual voidRemoveItem( DWORD dwId ) = 0; virtual voidShowItemName( BOOL bShow ) = 0; / virtual voidRemoveEffect( DWORD dwId ) = 0; virtual voidDraw () = 0; ; /class IW
11、3DWorld,16,宏定义举例(应用)Contd.,class CW3DWorld : public IW3DWorld SINGLETON_COMPONENT( CW3DWorld ); public: UNDER_MEMORY_MGR(CW3DWorld ); CW3DWorld() / / CW3DWorld / voidDraw() / / Draw private: DWORDm_dwFogColor;/ Fog color / ; /class CW3DCamera IMPLEMENT_SINGLETON_COMPONENT( CW3DWorld, World );,17,宏定义举例(应用)Contd.,在某程序段中定义对象如下: IW3DWorld* m_pWorld ; 则,可以采用下列简单方法进行初始化: m_pWorld = MAKE_COMPONENT( World ); CHECK_PTR_RETURN( m_pWorld ); m_pWorld -RemoveMonster( ); m_pWorld -RemoveItem( ); m_pWorld -RemoveEffect( ); m_pWorld -Draw( );,18,常用调试技巧,请参考程序演示,结合程序示例讲解常用的调试技术: Console
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考生物一轮复习 课后习题 课时规范练6 水进出细胞的原理(H版)
- 有机认证考试题目及答案
- 2025-2026学年广州市增城区数学四下期末检测试题(含答案)
- 周口事业编考试题目及答案详情
- 创意编程专项测试题及参考答案
- 灯具练习题及对应答案大全
- 销售项目运作考卷及答案分享
- 国外语文测试题目及答案解析
- 2026年中国并联V形三角带数据监测报告
- 数学必修五余弦定理
- 阅读胸片课件
- 部编版八年级下册语文期末专题复习课件
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
- 肉用能繁母牛繁殖管理技术规程
- 第一章 护理礼仪与美学课件
- 数学计算题四年级上册100道
- 作业治疗技术复习试题含答案
- 电力建设工程量清单计价规范变电
- 物业公司常见劳动争议处理
- LY/T 3274-2021木塑复合材料分级
- GB/T 30370-2022火力发电机组一次调频试验及性能验收导则
评论
0/150
提交评论