- 博客(24)
- 资源 (4)
- 收藏
- 关注
原创 JSONCPP
在游戏开发中,经常要用到JSON格式。1.JSON介绍JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。
2012-08-30 15:57:55 904
原创 成员函数模板
我们知道,类里面提供一个缺省的拷贝构造函数(copy constructor)和拷贝赋值运算符(copy assignment operator)。所谓“缺省”,就是你自己不写出来,系统就自己为你生成。我们来看下面一段代码:templateclass CT{public: CT(){} template CT(const X& ref) { cout
2012-08-30 15:56:00 542
原创 引用在成员函数中的几种情况
先看下面一段代码:class CRet{};class CTest{public: CRet Get1() { return m_objCRet; } CRet& Get2() { return m_objCRet; }private: CRet m_objCRet;};int main(int argc, char* a
2012-08-30 15:54:51 507
转载 包含与继承
在《代码大全》这本书的第六章中提到了有关包含与继承的一些原则,我摘取如下: 一、包含("has a") 包含表示一个类含有一个基本数据元素或对象。包含是面向对象编程的主力技术。 (1)通过包含来实现"has a"的关系。 (2)在万不得已时通过private继承来实现"has a"的关系。 (3)警惕有超过有7个数据成员的类。
2012-04-22 15:43:38 1917
原创 类对象的“传值”与“传引用”
"传值"就是通过值来传递一个对象,这个过程需要拷贝构造函数来进行。而"传引用"实质上就是一种指针传递。两种传递方式在使用上存在效率问题和"切割"问题。 1、效率 而前所述,"传值"需要调用拷贝构造函数。例如: class CTest { public: CTest() { cout
2012-03-25 21:55:23 1873
原创 结构体对齐和类的大小
一、字节对齐的概念 如果一个变量占用N个字节,那么该变量的起始地址必须是N的整数倍。这就是字节对齐。当然,字节对齐是系统内部操作的。理论上来说,系统能从任意地址开始读取数据。但是有些系统偏偏喜欢规定某些类型变量只能从特定的起始地址开始访问,这就决定了类型变量必须按照某种规则在内存空间存放。 二、对齐准则 对齐细节与编译器有关,不过一般满足下面三个准则: (1)
2012-03-16 15:09:57 420
原创 函数指针
一、函数指针的定义 顾名思义,函数指针指的是指向函数的指针。每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址,因而可以利用函数指针调用该函数。它的定义如下: 函数类型 (*指针名字)(函数形参表) 可以这样来理解这个定义(假设指针名字为PtrName): ① PtrName首先与‘*’相结合,这意味着PtrName是一个指针。 ② PtrNam
2012-01-13 17:26:25 393
原创 mutable关键字
mutable的英文意思是“可变的、易变的”。它在C++中的作用是:被定义为mutable的成员变量能在const成员函数中被修改。它使为了突破const的限制而设置的。 众所周知,如果一个成员函数不改变类的对象的状态,通常把这个成员函数定义为const。不过有时候,的确需要修改与对象的状态无关的成员变量,这时mutable就发挥作用了。例如: class CTest {
2012-01-04 12:21:24 411
原创 explicit关键字
explicit的英文意思是“明确的、毫不隐瞒的”。在C++中,它的作用是:阻止不应该允许的经过转换构造函数进行的隐式转换的发生。 构造函数通常用explicit来声明。只有一个参数的构造函数(或者除了第一个参数外其他的参数都有默认值的多参数构造函数)有两种角色:构造器及默认且隐含的类型转换操作符。看下面的例子: class CTest() { pu
2011-12-30 17:24:12 409
转载 柔性数组成员
在讲述柔性数组成员之前,首先要介绍一下不完整类型(incomplete type)。不完整类型是这样一种类型,它缺乏足够的信息例如长度去描述一个完整的对象。 1、不完整类型 incomplete types (types that describe objects but lack information needed to determine their sizes).
2011-12-30 12:13:35 116
原创 RSA算法
一、说明 RSA算法既能用于数据加密,也能用于数字签名。其理论依据是:寻找两个大素数容易,而将它们的乘积分解开则异常困难。在RSA算法中,包含两对密钥:公有密钥对和私有密钥对。公有密钥对是公开的。 二、密钥产生过程 (1)选择两个大素数p和q,p和q均大于10100,n = p * q,z = (p - 1) * (q - 1); (2)随机选择加
2011-12-26 21:20:37 689
原创 Lib与Dll
一、Lib与Dll的比较 静态链接库即Lib,动态链接库即Dll。他们都是代码共享的方式。所谓“静态”,就是Link的时候把Lib里 面需要的信息抽取出来安排到exe文件中,以后运行exe文件时不再需要Lib;所谓“动态”,就是exe运行的时候 依赖于Dll提供的功能。 Lib与Dll的比较如下: (1)如果采用Lib,Lib的指令都被直接包含在最终生成的ex
2011-12-20 14:50:08 122
原创 C++ 关于构造函数
每个类都有构造函数。构造函数的主要功能是给对象分配空间、对私有成员数据赋初值。一般不做赋初值以外的事情。平时遇到的构造函数有:缺省参数的构造函数、缺省的构造函数、重载构造函数、拷贝构造函数。 使用上述几种构造函数时,应注意以下几点: 1、缺省参数的构造函数中,形参已经有默认值,定义对象是可根据需要使用其缺省值。 例如: class CText
2011-11-25 17:15:49 1320
原创 Socket IO模型之IOCP
1、IOCP IOCP(完成端口)是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!但不幸的是,该模型只适用于Windows NT和Windows 2000操作系统。因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千个套接字的时候,而且希望随着系统内安装的CPU数量的增多,应用程序的性能也可以线
2011-11-22 09:01:39 520
原创 Chain Of Responsibility模式
1、作用 假设存在一个请求以及多个对象。为了使多个对象都有机会处理这个请求,将这些对象连成一条链,并沿着该链传递这个请求,直到有一个对象处理请求为止。 举一个例子。在《步步惊心》中,假如康熙皇帝在太和殿要召见马尔泰若曦,皇帝得先通知旁边的太监李德全,然后李德全高喊“传马尔泰若曦进谏”,接着站在太和殿外的太监依次高喊“传马尔泰若曦进谏”,直到有一个太监传到马尔泰若曦。在这里中,“
2011-11-17 12:10:53 338
原创 Observer模式
1、问题 Observer模式要解决的问题是:建立一个“一”对“多”的依赖关系。当这个“一”发生变化的时候,依赖这个“一”的“多”也能同时改变。这里中,“一”即是Subject,“多”即是Observer。 举个简单的例子:同一组数据能够以表格、柱状图、百分比的形式来表示。当然这些表示形式都依赖于这一组数据,当这一组数据改变的时候,这些表示形式也要做相应的改变。
2011-11-17 10:40:42 336
原创 C++ 流的随机访问
1、几个函数 为支持随机访问,IO类型维护一个“标志”,该“标志”能决定从何处读或写。 IO类型提供了两对函数:seekg()/tellg()和seekp()/tellp()。前者有输入流使用,后者由输出流使用。这四个函数的功能如下: seekg() //重新定位输入流中的位置 tellg(
2011-10-13 14:07:11 579
原创 Windows同步机制
在多线程程序设计中,不可避免地面临着同步问题。在Win32中,有以下四种同步机制。 1、临界区 - Critical Section (1) 说明 多线程程序中,有些代码是共享资源,需将这些代码作为临界区。如果有多个线程试图同时访问临界区,那么在一个线程进入后,其他线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占。
2011-10-09 10:03:16 2200
原创 C++ 虚函数
1、定义 C++语言有多态特性,而虚函数正是其表现之一。关于其定义,有以下三个要点: (1)必须是基类的非静态成员函数。 (2)访问权限可以是保护型或公有型。 (3)函数前需加上关键字virtual。 2、作用 下面举一例子说明。 #include using namespace std; cl
2011-09-25 15:36:21 583
原创 C++ 异常处理
程序运行时有些错误是不能避免的。出现错误时,传统的做法是返回一个错误值,调用if语句进行判断。这种做法有两种缺陷: (1) 构造函数不可能返回错误值; (2) if语句可能出现更多错误。 C++提供了异常机制。异常处理的基本思想是:当出现错误时抛出一
2011-09-17 16:50:31 324
原创 Singleton模式
1、说明 Singleton模式也即单例模式,保证一个类只有一个实例,并为该类提供一个全局访问点。在面向对象和面向过程的设计范式中,定义一个全局变量(对象)能实现这一点。但在遇到纯粹的面向对象范式时,就需要通过Singleton模式实现了。 2、原理与实现 下面是一个简单的、基础的Singleton程序。 class CSingleton {
2011-09-15 00:19:20 519
原创 关于const
《Effective C++》中提到"尽量用编译器而不用预处理"。在C语言中,#define宏定义是很不安全的。例如定义下面的PI: #define PI 3.14 编译器是看不到PI这个符号的,因为在它进入编译器之前,它已经被预处理去掉,而没有保存在符号表里面。如何有关PI的代码出错时,报错信息是指3.14,而不是PI,万一这个PI不是自己定义的,你得花多少时间把它给挖出
2011-09-13 23:36:01 470
原创 C++ 智能指针实现
1、问题的提出 先看下面的例子: class CText { public: CText(int *&ptr):m_ptr(ptr) { } ~CText() { delete m_ptr
2011-09-13 15:05:35 561
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人