﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Figo的狗窝-文章分类-C++</title><link>http://www.cppblog.com/figoyao/category/12681.html</link><description>我也很想让世界变得更好，可是上帝却不开放源代码。</description><language>zh-cn</language><lastBuildDate>Sun, 03 Jan 2010 11:07:57 GMT</lastBuildDate><pubDate>Sun, 03 Jan 2010 11:07:57 GMT</pubDate><ttl>60</ttl><item><title>游戏辅助工具开发教程-从入门到精通之A1_7篇</title><link>http://www.cppblog.com/figoyao/articles/104693.html</link><dc:creator>Figo</dc:creator><author>Figo</author><pubDate>Sun, 03 Jan 2010 07:30:00 GMT</pubDate><guid>http://www.cppblog.com/figoyao/articles/104693.html</guid><wfw:comment>http://www.cppblog.com/figoyao/comments/104693.html</wfw:comment><comments>http://www.cppblog.com/figoyao/articles/104693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/figoyao/comments/commentRss/104693.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/figoyao/services/trackbacks/104693.html</trackback:ping><description><![CDATA[<p>作者：<a  href="http://www.figoyao.com/" target="_blank">Figo</a></p>
<p>本篇讲解一些杂项：预处理命令、typedef定义新类型以及推荐书目。</p>
<p>1、预处理命令<br>
该类命令一般以<strong>#</strong>（井字符）开头：#include；#define、#undef；#if、#ifdef、#ifndef、#else、#elif；#pragma。<br>
1）、#include 记号序列<br>
记号序列必须被解释为&lt;&#8230;&gt;或&#8221;&#8230;&#8221;之一，如：<br>
<span style="color: #0000ff;">#include</span> &lt;stdio.h&gt; <span style="color: #008000;">//包含标准输入输出头文件</span><br>
<span style="color: #0000ff;">#include</span> &#8220;userdefine.h&#8221; <span style="color: #008000;">//包含用户自定义头文件</span><br>
这两者的区别在于，&lt;&#8230;&gt;指示编译器去系统目录或环境变量寻找头文件；而&#8221;&#8230;&#8221;指示首先去当前目录寻找头文件，如果找不到再按照前者规则寻找。<br>
2）、#define 标示符 记号序列 或 #define 标示符<br>
#define的第一种用法主要用在定义宏，如：<br>
#define PI 3.1415926<br>
上面就定义PI为3.1415926，但实际上我们推荐使用const方式来定义。<br>
#define的第二种用法主要用在编译不同版本及指示标志，如：<br>
#define _UNICODE<br>
这样定义的话当我们编写windows应用程序时候，里面函数版本会被替换为UNICODE版本。而#undef的作用在于抵消#define定义的指示标志：<br>
#undef _UNICODE<br>
这会导致上面的#define语句失效。<br>
3）、#if 系列主要用在debug和防止头文件重复包含方面：<br>
4）、#pragma<br>
该预处理指令是比较复杂的一个，你只需暂时记住有即可，当你遇到也不会生疏。如需详细用法可查阅<a  href="http://www.china-pub.com/39842" target="_blank">手册</a>。</p>
<p>2、typedef<br>
主要用来定义新类型别名，其用法如下：<br>
<span style="color: #0000ff;">typedef</span> 原数据类型名 新数据类型名<br>
比如wchar_t的定义为：<strong>typedef</strong> <span style="color: #0000ff;">unsigned short</span> wchar_t。</p>
<p>3、推荐书目<br>
《<a  href="http://www.china-pub.com/14975" target="_blank">C程序设计语言</a>》<br>
《<a  href="http://www.china-pub.com/38125" target="_blank">C缺陷与陷阱</a>》<br>
《<a  href="http://www.china-pub.com/38679" target="_blank">C和指针</a>》<br>
《<a  href="http://www.china-pub.com/5926" target="_blank">C++ Primer</a>》<br>
《<a  href="http://www.china-pub.com/7645" target="_blank">C++标准程序库</a>》</p>
<p>至此C++基础就讲完了，下面开始的章节将讲解汇编语言程序设计。</p>
<p>转载请注明出处：<span id="sample-permalink"><a  href="http://www.figoyao.com/blog/2009/12/04/116/" target="_blank">http://www.figoyao.com/blog/2009/12/04/116/</a></span></p><img src ="http://www.cppblog.com/figoyao/aggbug/104693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/figoyao/" target="_blank">Figo</a> 2010-01-03 15:30 <a href="http://www.cppblog.com/figoyao/articles/104693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏辅助工具开发教程-从入门到精通之A1_5篇</title><link>http://www.cppblog.com/figoyao/articles/104691.html</link><dc:creator>Figo</dc:creator><author>Figo</author><pubDate>Sun, 03 Jan 2010 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/figoyao/articles/104691.html</guid><wfw:comment>http://www.cppblog.com/figoyao/comments/104691.html</wfw:comment><comments>http://www.cppblog.com/figoyao/articles/104691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/figoyao/comments/commentRss/104691.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/figoyao/services/trackbacks/104691.html</trackback:ping><description><![CDATA[<p>作者：<a  href="http://www.figoyao.com/" target="_blank">Figo</a></p>
<p>本篇讲解类的使用。</p>
<p>当谈到类的时候，我们经常听到的是面向对象编程（oop），其实呢，面向对象是一种编程思想，只不过类机制较好的支持这种想法，但是并不代表要编写面向对象的程序一定要用C++或类似语言（如Java等），即使用传统的C，依然可以写出面向对象的程序。</p>
<p>class的成员除了可以是数据外，最大的变化是，函数也可以作为其成员，对于其成员按照访问属性的不同有：private、public和
protected三种。按照来源不同，其成员可分为：用户自定义、语言默认和强制系统定义。我们可以把一个类理解为一个功能完整的小麻雀：除了具有数据
成员外，还有具有类提供给用户的功能函数。下面设计一个动物类：<br>
<span style="color: #0000ff;">class animal<br>
{<br>
&nbsp;&nbsp;&nbsp; private：<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void&nbsp; eat();<span style="color: #008000;">//吃饭</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void&nbsp; sleep();<span style="color: #008000;">//睡觉</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void&nbsp; run();<span style="color: #008000;">//跑</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp; age;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool&nbsp; alive;<br>
&nbsp;&nbsp;&nbsp; public:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool&nbsp; feed();<span style="color: #008000;">//喂食</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool&nbsp; blood();<span style="color: #008000;">//血型</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void&nbsp; state();<span style="color: #008000;">//状态信息</span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp; foodlimit;<span style="color: #008000;">//饮食控制</span><br>
};<br>
</span>animal类呢其实是定义了一个模板，因为大部分陆地动物都具有上面的属性，类的成员函数<strong>通常</strong>在类外
完成具体实现，实际编程时，我们一般都把类声明放在头文件中，而把类实现放在包含头文件的同名cpp源文件中，如，我们在define.h中定义了要实现
的类和数据结构以及系统头文件预处理，那么我们需要新建一个名为define.cpp的源文件，该源文件要在文件开始包含define.h文件，这样我们
在其他文件中如果要使用这个类，只要包含define.h即可，建议大家有意识的建立自己的个人类库，随着时间的推移，你会发现你的开发效率会大大提高。</p>
<p>下面我们实际开始动手，本教程使用的工具是Visual C++6.0：<br>
<strong>第一步</strong>：新建文件<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/68/null"><img  src="http://farm3.static.flickr.com/2750/4154265191_19c276ff0f_o.jpg" class="alignnone" title="ctrl+n" alt="" height="359" width="160"></a><br>
<strong>第二步</strong>：工程类型<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/68/null"><img  src="http://farm3.static.flickr.com/2577/4154271687_e8be19e572_o.jpg" class="alignnone" title="project" alt="" height="479" width="739"></a><br>
<strong>第三步</strong>：建立空工程【我给工程起名字是ClassDefine】<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/68/null"><img  src="http://farm3.static.flickr.com/2640/4154276973_45d5f44639_o.jpg" class="alignnone" title="finish" alt="" height="464" width="611"></a><br>
<strong>第四步</strong>：添加头文件和源文件<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/68/null"><img  src="http://farm3.static.flickr.com/2795/4155046880_e5af436951_o.jpg" class="alignnone" title="define.h" alt="" height="477" width="741"></a></p>
<p><a  href="http://www.figoyao.com/blog/2009/12/03/68/null"><img  src="http://farm3.static.flickr.com/2667/4155046882_dc9c058731_o.jpg" class="alignnone" title="define.cpp" alt="" height="478" width="740"></a><br>
上面两项建立好后左侧目录如下：<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/68/null"><img  src="http://farm3.static.flickr.com/2559/4155046876_721b1eb797_o.jpg" class="alignnone" title="gamebegin" alt="" height="136" width="209"></a><br>
<strong>第五步</strong>：添加类定义和实现<br>
<em><strong>类的定义</strong></em><br>
<a  href="http://www.figoyao.com/blog/2009/12/03/68/null"><img  src="http://farm3.static.flickr.com/2700/4155106190_f59dea32f5_o.jpg" class="alignnone" title="definehdetail" alt="" height="473" width="572"></a><br>
<em><strong>类的实现：</strong></em><br>
<a  href="http://www.figoyao.com/blog/2009/12/03/68/null"><img  src="http://farm3.static.flickr.com/2729/4155106196_9be479815f_o.jpg" class="alignnone" title="definecppdetail" alt="" height="598" width="719"></a><br>
<strong><em>建立main函数文件</em></strong><br>
<a  href="http://www.figoyao.com/blog/2009/12/03/68/null"><img  src="http://farm3.static.flickr.com/2685/4155106198_85ed38d9bc_o.jpg" class="alignnone" title="maincppdetail" alt="" height="509" width="677"></a><br>
完整源文件<a  href="http://figoyao.com/blog/file/ClassDefine.rar" target="_blank">下载</a>。<br>
类成员的三种不同属性主要用来限制成员的访问方式，读者可以看到上面当定义一个类对象smFish后，我们使用.(点)运算符来访问成员，能够使用此种方
式被访问的只有被指明是public的成员，凡是private属性的成员是不能这样被访问的，此时只能在成员内部使用。关于friend（友元）属性本
教程不涉及，读者可以参考<a  href="http://www.china-pub.com/5926" target="_blank">C++ primer</a>或其他书籍进一步研究。</p>
<p>下次我们将讲解类的继承派生和虚函数。</p>
<p>转载请注明出处：<span id="sample-permalink"><a  href="http://www.figoyao.com/blog/2009/12/03/68/" target="_blank">http://www.figoyao.com/blog/2009/12/03/68/</a></span></p><img src ="http://www.cppblog.com/figoyao/aggbug/104691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/figoyao/" target="_blank">Figo</a> 2010-01-03 15:29 <a href="http://www.cppblog.com/figoyao/articles/104691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏辅助工具开发教程-从入门到精通之A1_6篇</title><link>http://www.cppblog.com/figoyao/articles/104692.html</link><dc:creator>Figo</dc:creator><author>Figo</author><pubDate>Sun, 03 Jan 2010 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/figoyao/articles/104692.html</guid><wfw:comment>http://www.cppblog.com/figoyao/comments/104692.html</wfw:comment><comments>http://www.cppblog.com/figoyao/articles/104692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/figoyao/comments/commentRss/104692.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/figoyao/services/trackbacks/104692.html</trackback:ping><description><![CDATA[<p>作者：<a  href="http://www.figoyao.com/" target="_blank">Figo</a></p>
<p>本篇讲解类的继承派生和虚函数。</p>
<p>一、继承派生机制<br>
在古装片里我们经常看到某某太子继承王位，太子继承王位的结果就是他首先拥有了皇帝的权利并要原则上承担义务；又或某张三继承富翁老爹的财产，那么这个某张三就拥有了富翁对于财产的支配权等等。在类里面的继承和这些很类似，比如我们<a  href="http://www.figoyao.com/blog/2009/12/03/68/" target="_blank">上节</a>定义了一个叫做Fish的类，鱼分很多种，有金鱼、草鱼、武昌鱼（╮(╯_╰)╭）等等，当我们需要实现一个<a  href="http://zh.wikipedia.org/zh-cn/%E9%9B%BB%E9%B0%BB" target="_blank">电鳗</a>类的定义时，我们可以从已经定义好的Fish类派生一个电鳗类，派生的子类就继承了Fish所以的特征；同时，因为电鳗有自己的特点，比如放电，因此我们还要定义电鳗自身的特征函数和特征数据：<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/74/null"><img  src="http://farm3.static.flickr.com/2790/4155187592_4d9ba0c0e0_o.jpg" class="alignnone" title="public" alt="" height="132" width="264"></a><br>
此时电鳗类就简单定义完成了，继承时候需要制定继承参数类型：public、private和protected。继承类型的不同会影响成员的属性：</p>
<table bgcolor="#ffffff" border="1">
    <tbody>
        <tr>
            <td><span style="font-size: x-small;">继承方式</span>[<span style="font-size: medium; color: #ff0000;"><strong>&#8595;</strong></span>]<span style="font-size: x-small;">访问属性</span>[<strong><span style="font-size: medium; color: #ff0000;">&#8594;</span></strong>]</td>
            <td><strong>public</strong></td>
            <td><strong>protected</strong></td>
            <td><strong>private</strong></td>
        </tr>
        <tr>
            <td><strong>public</strong></td>
            <td>public</td>
            <td>protected</td>
            <td>不可访问</td>
        </tr>
        <tr>
            <td><strong>protected</strong></td>
            <td>protected</td>
            <td>protected</td>
            <td>不可访问</td>
        </tr>
        <tr>
            <td><strong>private</strong></td>
            <td>private</td>
            <td>private</td>
            <td>不可访问</td>
        </tr>
    </tbody>
</table>
<p>具体到电鳗类，我们看下Fish类的定义：<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/74/null"><img  src="http://farm3.static.flickr.com/2700/4155106190_f59dea32f5_o.jpg" class="alignnone" title="FishClass" alt="" height="473" width="572"></a></p>
<p>因为电鳗的继承方式是public，对照上面表格，可知电鳗中的Eat()等函数依旧是public属性。下面给出代码，大家可以看下用法：<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/74/null"><img  src="http://farm3.static.flickr.com/2528/4154539355_74ac267262_o.jpg" class="alignnone" title="efish" alt="" height="393" width="478"></a></p>
<p>二、虚函数<br>
在继承的机制中存在这样的问题，子类成员函数如果有何父类同名的话应该如何处理呢？C++中引入了虚函数机制，多态性就是通过虚函数来体现的。<br>
我们先来看下不用虚函数机制，直接在子类中定义同名函数：<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/74/null"><img  src="http://farm3.static.flickr.com/2799/4155579482_e488e7cf41_o.jpg" class="alignnone" title="eat" alt="" height="73" width="304"></a><br>
父类Fish类中Eat的定义如下：<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/74/null"><img  src="http://farm3.static.flickr.com/2798/4154822725_d63872580d_o.jpg" class="alignnone" title="fisheat" alt="" height="89" width="305"></a><br>
执行结果如下：<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/74/null"><img  src="http://farm3.static.flickr.com/2748/4154870833_57bb84f22f_o.jpg" class="alignnone" title="virtual" alt="" height="607" width="522"></a><br>
注意上图红色方框处的指示。我们本来的想法是当指针pFish指向不同的类时执行不同的成员函数，但实际是，未强制类型转换前执行的依旧是父类Eat函数，为了避免类型转换的麻烦，引进的虚函数：<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/74/null"><img  src="http://farm3.static.flickr.com/2753/4155641622_d596191832_o.jpg" class="alignnone" title="parents" alt="" height="467" width="374"></a><br>
此时执行的结果如下：<br>
<a  href="http://www.figoyao.com/blog/2009/12/03/74/null"><img  src="http://farm3.static.flickr.com/2668/4154870835_dd81b85691_o.jpg" class="alignnone" title="parents" alt="" height="595" width="506"></a></p>
<p>
下一节将把一些杂项讲解一下，然后C++精简教程就完结了。</p>
<p>转载请注明出处：<span id="sample-permalink"><a  href="http://http//www.figoyao.com/blog/2009/12/03/74/">http://www.figoyao.com/blog/2009/12/03/74/</a></span></p><img src ="http://www.cppblog.com/figoyao/aggbug/104692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/figoyao/" target="_blank">Figo</a> 2010-01-03 15:29 <a href="http://www.cppblog.com/figoyao/articles/104692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏辅助工具开发教程-从入门到精通之A1_3篇</title><link>http://www.cppblog.com/figoyao/articles/104689.html</link><dc:creator>Figo</dc:creator><author>Figo</author><pubDate>Sun, 03 Jan 2010 07:27:00 GMT</pubDate><guid>http://www.cppblog.com/figoyao/articles/104689.html</guid><wfw:comment>http://www.cppblog.com/figoyao/comments/104689.html</wfw:comment><comments>http://www.cppblog.com/figoyao/articles/104689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/figoyao/comments/commentRss/104689.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/figoyao/services/trackbacks/104689.html</trackback:ping><description><![CDATA[<p>作者：<a  href="http://www.figoyao.com/" target="_blank">Figo</a></p>
<p>本篇讲解指针和函数。</p>
<p>一个运行的程序，其指令和数据主要存储位置是内存。当我们定义好数据后，如何取用该数据呢。比如：<br>
int&nbsp; iTest = 0;<br>
上面我们定义了iTest，任何事物不能凭空存在，包括数据，iTest的存储位置就是内存中一个4字节的单元，那么当我们要使用iTest的时候计算机
如何知道去哪里找它呢，实际上是使用了指针机制。指针本质上是索引，可以理解为学号，在一个学校里面，所有人的学号都是不同的，有些人可能生日啊、名字的
相同，但学号是不会相同的；在内存中，有些数据的值可能一样，但是指示这些数据存储位置的指针却不可能相同（我们在此暂不考虑Window系统中私有内存
机制）。在家乐福等大型超市里面我们要自助存包的时候，每个储物箱对应着唯一编号（即指针），当我们存包后（即定义变量），储物箱中有了内容物（即数
据），购物完毕，我们可以依据储物箱编号准确找到自己的物品，指针的机制就是如此。</p>
<p>由上段我们看到指针类型可以多种多样：在C++中，当要指示不同数据类型时候指针类型也是不同的。其定义方法如下：<br>
1、定义一个指向int类型的指针<br>
<span style="color: #0000ff;">int<span style="color: #ff0000;">*</span> piNum;</span><br>
2、定义一个指向char型的指针<br>
<span style="color: #0000ff;">char <span style="color: #ff0000;">*</span>pcCh;</span><br>
通用定义格式如下，其中<span style="color: #ff0000;">*</span>指的是星号：<br>
[数据类型]* 变量名;<br>
定义指针完毕我们可以给指针赋值：<br>
<span style="color: #0000ff;">int</span> iNum = 3;<br>
piNum =<span style="color: #ff0000;"> &amp;</span>iNum;<br>
上面定义中，<span style="color: #ff0000;">&amp;</span>为取地址符，求出iNum的存储地址后，把地址的值赋给piNum，此时piNum指向就是存储单元中的内容物就是3。</p>
<p><strong>指针的运算</strong><br>
我们假设p和q均为指向char类型数据的指针<br>
1、加法<br>
q = p+1：q指向p为起点向后数1个存储位置的数据单元，即紧邻p位置的但地址大于p数据单元。<br>
q = p+n：q指向p为起点向后数n个存储位置的数据单元。<br>
2、减法<br>
q = p-1：q指向p为起点向前数1个存储位置的数据单元，即紧邻p位置的但地址小于p数据单元。<br>
q = p-n：q指向p为起点向前数n个存储位置的数据单元。<br>
3、指针相减<br>
<span style="color: #0000ff;"><strong>q</strong></span>-&gt;|&#8217;A'|&nbsp;[<span style="color: #008000;">0x0410000h</span>]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&#8217;B'| [<span style="color: #008000;">0x0410002h</span>]<br>
<strong><span style="color: #0000ff;">p</span></strong>-&gt;|&#8217;C'| [<span style="color: #008000;">0x0410004h</span>]<br>
上面中括号中数值表示指针p和q的实际取值，C++中规定两个指针相减并不是在用地址作减法，而是两个指针所代表的地址位之间的数据个数的减法。以上面示意图为例，p-q的数值并不是0&#215;4h，而是0&#215;2h，因为q指的是第1个数据，p指的是第3个数据，3-1=2。</p>
<p>指针就暂时讲到这里，下面开始讲解函数。<br>
我们可以这样理解函数，如果学校的大门属于入口函数main的话，学校的设施就是这个函数中的内容，而各个班级则可以理解为<strong>自定义函数</strong>，班级内部的实现过程只和本班级有关系。比如我要定义一个加法函数addnum( )，那么一个函数的标准格式如下：<br>
<span style="color: #0000ff;">返回类型</span> <span style="color: #ff0000;">函数名</span>(<strong>参数类型</strong> 参数1, <strong>参数类型</strong> 参数2,&#8230;)<br>
{<br>
&nbsp;&nbsp;&nbsp; <span style="color: #008000;">函数体</span>;<br>
}<br>
<span style="color: #0000ff;">int</span> <span style="color: #ff0000;">addnum</span>(<strong>int</strong> iNum1, <strong>int </strong>iNum2)<br>
{<br>
&nbsp;&nbsp;&nbsp;<span style="color: #008000;"> return iNum1+iNum2;<br>
</span>}</p>
<p>为什么要把指针和函数放在一起讲呢，因为函数的识别过程和指针有很大关联。函数名实际上就是指针变量的值：<br>
int (*paddnum)(int iNum1, int iNum2);<br>
paddnum = addnum;<br>
上面我们定义了一个指向addnum()函数的函数指针paddnum。</p>
<p>下节主要讲解构造类型数据。</p>
<p>转载请注明出处：<span id="sample-permalink"><a  href="http://www.figoyao.com/blog/2009/12/02/62/" target="_blank">http://www.figoyao.com/blog/2009/12/02/62/</a></span></p><img src ="http://www.cppblog.com/figoyao/aggbug/104689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/figoyao/" target="_blank">Figo</a> 2010-01-03 15:27 <a href="http://www.cppblog.com/figoyao/articles/104689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏辅助工具开发教程-从入门到精通之A1_4篇</title><link>http://www.cppblog.com/figoyao/articles/104690.html</link><dc:creator>Figo</dc:creator><author>Figo</author><pubDate>Sun, 03 Jan 2010 07:27:00 GMT</pubDate><guid>http://www.cppblog.com/figoyao/articles/104690.html</guid><wfw:comment>http://www.cppblog.com/figoyao/comments/104690.html</wfw:comment><comments>http://www.cppblog.com/figoyao/articles/104690.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/figoyao/comments/commentRss/104690.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/figoyao/services/trackbacks/104690.html</trackback:ping><description><![CDATA[<p>作者：<a  href="http://www.figoyao.com/" target="_blank">Figo</a></p>
<p>本篇讲解构造类型数据。</p>
<p>构造类型数据包括以下几种：<br>
指针类型、数组类型、结构体类型（struct）、共用体类型（union）、枚举类型（enum）、类类型（class）</p>
<p>1、指针类型<br>
<a  href="http://www.figoyao.com/blog/2009/12/02/62/" target="_blank">上节</a>已经讲解过了。</p>
<p>2、数组类型<br>
组，就是把相同的个体集合为一个整体，以便于处理。数组其实除了由各种数组成的集合，其字面意义已经延伸至任何相同类型的个体组成的集合，如，字符数组、指针数组等等。数组的定义及表示方法如下：<br>
类型 数组名[个数];<br>
一个例子：<br>
1）、<span style="color: #0000ff;">int</span>&nbsp; isNum[10];<span style="color: #008000;">//定义一个拥有10个元素的整数数组</span><br>
2）、<span style="color: #0000ff;">char</span>&nbsp; szName[] = &#8220;Figo&#8221;;<span style="color: #008000;">//定义一个内容为Figo的字符数组</span><br>
C++中注释部分需要使用<span style="color: #008000;"><strong>//</strong></span>或<span style="color: #008000;">/* */<span style="color: #000000;">。</span></span>注意到<strong>前者</strong>下标明确指出是10，但在C++中下标是从0开始表示，直至9，即isNum[10]指的是isNum[0]、isNum[1]、&#8230;isNum[8]、isNum[9]，<strong><span style="color: #ff0000;">没有isNum[10]</span></strong>！<strong>后者</strong>没有指出确切的下标，系统将按照实际长度分配下标，Figo是4个字符，所以<span style="color: #0000ff;">char</span>&nbsp; szName[] = &#8220;Figo&#8221;;等价于<span style="color: #0000ff;">char</span>&nbsp; szName[4] = &#8220;Figo&#8221;;<br>
数组初始化有2种方法：<br>
1）、<span style="color: #0000ff;">int</span> isNum[10] = {1,2,3,4,5};<br>
从isNum[0]到isNum[4]依次为1到5，而isNum[5]到isNum[9]全部为0。<br>
2）、<span style="color: #0000ff;">int</span> isNum[10];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">int</span> isNum[0] = 1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">int</span> isNum[1] = 2;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&nbsp; &#8230;<br>
就是依次给个体赋值。<br>
数组维数一般常用的是一维数组、二维数组和三维数组，使用频率依次降低。<br>
二维数组就是下面有2个：<br>
类型 数组名[下标1][下标2];<br>
int&nbsp; iClass[6][4];<span style="color: #008000;">//一个学校6个年级，每年级有4个班</span></p>
<p><span style="color: #000000;">3、结构体类型<br>
其格式为：<br>
<span style="color: #0000ff;">struct</span>&nbsp; 结构体名<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型1&nbsp; 成员1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型2&nbsp; 成员2;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&nbsp;&nbsp;&nbsp; &#8230;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型n&nbsp; 成员n;<br>
};<br>
<span style="color: #0000ff;">struct</span>&nbsp; <strong>StuInfo</strong><br>
{<br>
&nbsp;&nbsp;&nbsp; int iID;<br>
&nbsp;&nbsp;&nbsp; wchar_t szName[255];<br>
&nbsp;&nbsp;&nbsp; bool bReg;<br>
};<br>
结构体本身的目的是为了使得功用相同的数据能够被归为一体从而便于处理，并使得数据流程<strong>结构清晰</strong>。当定义一个结构体后，可以使用结构体名去最为新类型的类型声明新变量：<br>
<strong><span style="color: #0000ff;">StuInfo</span></strong>&nbsp; XiaoMing = {20091202,&#8221;小明&#8221;,true};<br>
使用方法如下：<br>
XiaoMing.bReg = false;</span></p>
<p><span style="color: #000000;">4、共用体类型<br>
定义的一般形式如下：<br>
<span style="color: #0000ff;">union</span>&nbsp; 结构体名<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型1&nbsp; 成员1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型2&nbsp; 成员2;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&nbsp;&nbsp;&nbsp; &#8230;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据类型n&nbsp; 成员n;<br>
};<br>
<span style="color: #0000ff;">union</span>&nbsp;<strong>StuInfo</strong><br>
{<br>
&nbsp;&nbsp;&nbsp; int iID;<br>
&nbsp;&nbsp;&nbsp; wchar_t szName[255];<br>
&nbsp;&nbsp;&nbsp; bool bReg;<br>
};<br>
union和struct的区别在于内存空间的分配：union<strong>共用</strong>体在声明时候，系统只会按照其成员变量中占用存储空间最大作为分配空间的标准，上面种szName占用最大，所以StuInfo的大小事255个字符的大小。你可以这样去理解，三个人轮流站岗，但是每8小时只能有一人上床休息，为了<strong>合理的</strong>节约资源，只制作了一张床，我们把床按照个子最高的人的身高作为标准制作才行。</span></p>
<p><span style="color: #000000;">5、枚举类型<br>
枚举类型用在switch的时候较多，如其名，枚举类型要求在定义的时候把所有可能的取值都列出来：<br>
<span style="color: #0000ff;">enum</span> 枚举类型名 {枚举元素1,枚举元素2,&#8230;,枚举元素n};<br>
<span style="color: #0000ff;">enum</span> Day {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};<br>
如果没有明确指出变量元素的具体数值，系统将自动按照从0开始依次加1的规则来赋值，即Monday = 0，Sunday = 6。从习惯来说，我们希望Monday = 1，那么我们需要这么定义：<br>
<span style="color: #0000ff;">enum</span> Day {Monday = 1,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};<br>
系统除了按照上面规则自动赋值外，如果程序员规定了具体数值后，系统将从规定数值的变量开始依次加1，即Monday = 1的话，Tuesday是Monday+1为2。</span></p>
<p>6、类类型<br>
类类型与上面最大的不同是可以规定变量的访问属性：public、private和protected，早没有规定访问属性时候默认为private。<br>
定义形式如下：<br>
<span style="color: #0000ff;">class</span>&nbsp; 类名<br>
{<br>
&nbsp;&nbsp;&nbsp;<strong> public</strong>:<br>
&nbsp;&nbsp;&nbsp; &#8230;&#8230;;<br>
&nbsp;&nbsp;&nbsp; <strong>private</strong>:<br>
&nbsp;&nbsp;&nbsp; &#8230;&#8230;;<br>
&nbsp;&nbsp;&nbsp; <strong>protected</strong>:<br>
&nbsp;&nbsp;&nbsp; &#8230;&#8230;;<br>
};<br>
<span style="color: #0000ff;">class</span>&nbsp; Fish<br>
{<br>
&nbsp;&nbsp;&nbsp; <strong>public</strong>:<br>
&nbsp;&nbsp;&nbsp; bool Born();<br>
&nbsp;&nbsp;&nbsp; int iNum;<br>
&nbsp;&nbsp;&nbsp; <strong>private</strong>:<br>
&nbsp;&nbsp;&nbsp; void eat();<br>
&nbsp;&nbsp;&nbsp; void dead();<br>
&nbsp;&nbsp;&nbsp; int iAge;<br>
};<br>
关于类的详细内容会在下一节来讲解。</p>
<p>转载请注明出处：<span id="sample-permalink"><a  href="http://www.figoyao.com/blog/2009/12/02/64/">http://www.figoyao.com/blog/2009/12/02/64/</a></span></p>
<ul class="previousnext clearfix">
    <li class="previous_post"><a  href="http://www.figoyao.com/blog/2009/12/02/62/"><span>上一篇:</span> 游戏辅助工具[外挂]开发教程-从入门到精通之A1_3篇</a></li>
</ul><img src ="http://www.cppblog.com/figoyao/aggbug/104690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/figoyao/" target="_blank">Figo</a> 2010-01-03 15:27 <a href="http://www.cppblog.com/figoyao/articles/104690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏辅助工具开发教程-从入门到精通之A1_2篇</title><link>http://www.cppblog.com/figoyao/articles/104688.html</link><dc:creator>Figo</dc:creator><author>Figo</author><pubDate>Sun, 03 Jan 2010 07:26:00 GMT</pubDate><guid>http://www.cppblog.com/figoyao/articles/104688.html</guid><wfw:comment>http://www.cppblog.com/figoyao/comments/104688.html</wfw:comment><comments>http://www.cppblog.com/figoyao/articles/104688.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/figoyao/comments/commentRss/104688.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/figoyao/services/trackbacks/104688.html</trackback:ping><description><![CDATA[<p>作者：<a  href="http://www.figoyao.com/" target="_blank">Figo</a></p>
<p>本篇讲解三种不同类型的控制语句：顺序结构语句、选择结构语句和循环结构语句。</p>
<p>计算机语言理论已经证明，使用上面的三种语句结构已足以表示所有问题，不同的是复杂度而已。这也就是我们常常听到的面向过程编程方法，因为是基于控制的。我们已经知道，计算机是很愚钝的，在知道了<a  href="http://www.figoyao.com/blog/2009/11/28/34/" target="_blank">基本的数据类型和运算符</a>后，当我们需要计算机为我们的意志服务时，必须把它需要做什么交代的一清二楚它才会按照指令行事，而这中间的媒介主要就是这3种语句。</p>
<p>一、顺序结构语句<br>
本语句不涉及关键字，只要相同语义范围内处于先后的语句自然构成了顺序结构。比如我们排队买票，假设你是售票员，你执行买票的过程就是顺序执行：先来的先
买到票。在编程中，每个函数体内，先出现的语句单位总是会先被执行。所谓函数体，值的就是编程中把相同功能的语句集合封装起来的一种逻辑结构。比如在QQ
里面，我们会根据好友与自己的不同关系而把好友归为不同的组，并为每组起名，有的叫<strong>同学</strong>，有的叫<strong>同事</strong>等等。但不论你怎么分组，总会有一组叫做<strong>我的好友</strong>。
而在我们写程序的时候，不论我们分不分组或怎么分组，系统都要求有一组叫做main，即所谓main函数，当然，我们会根据程序要完成的不同功能再自己定
义一些函数，把执行相同功能的语句归为一组，这就是我们的自定义函数。下面就是最简单的一个函数，它的作用是打印出&#8221;你好，游戏！&#8221;。<br>
<span style="color: #0000ff;">#include &lt;stdio.h&gt;<br>
void <span style="color: #ff0000;">main</span>()<br>
{<br>
&nbsp;&nbsp;&nbsp; <span style="color: #ff0000;">printf</span>(&#8221;%s\n&#8221;,&#8221;你好，游戏！&#8221;);<br>
}</span><br>
上面红色的都是函数名，main属于程序的入口函数，可以理解为计算机执行程序的时候首先会从main开始执行，即所谓入口；而printf属于打印函数，这个函数的实现在<strong>stdio.h</strong>文件中，正如电影有.wmv、.rmvb等格式，代码文件有.h、.cpp等格式，.h表示该文件是<strong>头文件</strong>，.cpp表示该文件时<strong>C++源码文件</strong>：头文件内容一般为函数声明，全局变量声明等，源码文件一般为函数具体的实现过程。<strong>#include</strong>关键字表示包含文件的意思，后面接要包含的文件，编译器在处理时，会用指示包含文件的内容替换掉#include声明。</p>
<p>二、选择结构语句<br>
选择语句主要有<strong>if</strong>实现和<strong>switch</strong>实现2种。<br>
1、if语句的基本形式<br>
1）、if(表达式) 语句<br>
2）、if(表达式) 语句<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else 语句<br>
3）、if(表达式1) 语句<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(表达式2)语句<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else 语句<br>
括号里面的表达式就是判断条件，我举个例子：<br>
<span style="color: #0000ff;"><span style="color: #ff0000;">if</span>(<span style="color: #008000;">是美女</span>) 要手机号;<br>
<span style="color: #ff0000;">else if</span>(<span style="color: #008000;">是美女的朋友</span>) 考虑要手机号;<br>
<span style="color: #ff0000;">else</span> 我是打酱油的&#8230;;</span></p>
<p><span style="color: #000000;">2、switch语句<br>
switch语句的存在主要是为了弥补if语句面对很多判断条件时候的不足，比如你要根据不同日期来做不同的事情，使用if语句作为判断的实现的话就会非常繁琐：<br>
if(1号) 走路;<br>
else if(2号) 睡觉;<br>
else if(3号) 游戏;<br>
&#8230;.<br>
else if(31号) 回家;<br>
</span>看到了吧，相当的繁琐，而switch的实现就很条理清晰，它的用法为：<br>
<span style="color: #0000ff;">switch(表达式)<br>
{<br>
&nbsp;&nbsp;&nbsp; case 情况1: 语句1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>
case 情况2: 语句2;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>
case 情况3: 语句3;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>
case 情况4: 语句4;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>
case 情况5: 语句5;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>
&#8230;<br>
case 情况n: 语句n;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>
default: 万金油语句;<br>
}</span><br>
当进入switch语句时候，满足条件的情况就会执行，其中break的作用在于执行完本情况语句后跳出switch语句。</p>
<p>三、循环语句<br>
1、do-while<br>
do<br>
{<br>
&nbsp;&nbsp;&nbsp; 语句;<br>
}while(条件表达式);<br>
该循环的特点是第一次执行不判断条件，后面的执行一旦条件不满足就立即停止循环。<br>
2、while语句<br>
while(条件表达式)<br>
{<br>
&nbsp;&nbsp;&nbsp; 语句;<br>
}<br>
该循环语句的特点是首先判断条件是否满足，满足才执行语句，否则不执行。<br>
3、for语句<br>
for(表达式1;表达式2;表达式3)<br>
{<br>
&nbsp;&nbsp;&nbsp; 语句;<br>
}<br>
for语句的特点是，首先求解表达式1，然后判断表达式2的真假，如果真则执行，否则for循环结束；表达式3在每次循环结束后求解，当求解完毕后再次判
断表达式2是否满足。糊涂了不要紧，我举个例子，比如你要上大学，在你第一去学校报到的时候，需要注册学籍，这就是求解表达式1，只需在开始的时候求一次
即可；然后每年的开学之初你都要去教学秘书那里报到，这就是求解表达式3；每次你报到完毕呢，班主任会检查你是否满足毕业的条件，这就是求解表达式2，一
旦满足，ok，你可以毕业了，这就是所谓for循环结束。写成语句如下：<br>
for(第一次注册学籍;是否毕业;开学注册)<br>
{<br>
&nbsp;&nbsp;&nbsp; 宿舍;<br>
&nbsp;&nbsp;&nbsp; 教室;<br>
&nbsp;&nbsp;&nbsp; 食堂;<br>
}</p>
<p>今天的讲解就先到这里，下次我们开始讲解函数和指针。</p>
<p>转载请注明出处：<span id="sample-permalink"><a  href="http://www.figoyao.com/blog/2009/11/29/56/" target="_blank">http://www.figoyao.com/blog/2009/11/29/56/</a></span></p><img src ="http://www.cppblog.com/figoyao/aggbug/104688.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/figoyao/" target="_blank">Figo</a> 2010-01-03 15:26 <a href="http://www.cppblog.com/figoyao/articles/104688.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>游戏辅助工具开发教程-从入门到精通之A1_1篇</title><link>http://www.cppblog.com/figoyao/articles/104687.html</link><dc:creator>Figo</dc:creator><author>Figo</author><pubDate>Sun, 03 Jan 2010 07:25:00 GMT</pubDate><guid>http://www.cppblog.com/figoyao/articles/104687.html</guid><wfw:comment>http://www.cppblog.com/figoyao/comments/104687.html</wfw:comment><comments>http://www.cppblog.com/figoyao/articles/104687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/figoyao/comments/commentRss/104687.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/figoyao/services/trackbacks/104687.html</trackback:ping><description><![CDATA[<p>作者：<a href="http://www.figoyao.com/" target="_blank">Figo</a></p>
<p>A1篇主要讲解C++程序设计基础。</p>
<p>任何一门语言本质上都是用来交流，所谓编程语言，你交流的最终对象是CPU，通过对CPU下达指令来操纵整个计算机甚至互联网。为什么是C++呢？因为这是我的入门语言（倒下一片）&#8230;其实有的人甚至用<a href="http://www.dywt.com.cn/" target="_blank">易语言</a>去编外挂，这再次说明，达到和CPU交流的目的即可，不要太在乎外皮。下面的讲解是在不对你之前的基础做太多假设的前提下进行的。闻道有先后，术业有专攻，先走过这条路的人，你们怀念下就好，别在这里充小牛，没啥意思，当然，我眼中的大牛也不会来看我的博客的，比如<a href="http://en.wikipedia.org/wiki/Donald_Knuth" target="_blank">Kunth大叔</a>。我尽量让整个教程浅显易懂、生动诙谐，但是任何技能在达到精通级别之前，都需要大量的付出。</p>
<p>语言是用来传递信息的，但是计算机对于信息的识别是很迟钝的，比如，任何时候，当你要对一个对象操作前，你得告诉计算机关于这个对象所有信息，比如
你要操作的是一个图片还是一个视频，是整数还是小数，是做加法还是做减法等等，这些都是数据。计算机的英文叫做computer，是单词
compute（v.计算）的名词，因为计算机主要的功能就是数据处理，而为了方便它处理数据，人为的把数据分成不同的类型，类似于为了方便收费，人为地
按照排量把汽车分为小排量和大排量等类型，因为这样的话交流起来就很方便，这也是为什么每个程序设计语言的开篇都会首先说说在本语言的范畴，都涉及哪些数
据类型以及基本的运算符号。在C++里，基本的数据类型有以下几种：<br>
【<strong>基本的</strong>】整数类型（int/short int/long int/unsigned int）、浮点数类型（float/double/long double）<br>
【<strong>引申的</strong>】字符类型（char）、布尔类型（bool）、空类型（void）<br>
【<strong>构造的</strong>】指针类型、数组类型、结构体类型（struct）、共用体类型（union）、枚举类型（enum）、类类型（class）<br>
所谓基本的类型，是指CPU层次的支持，引申的类型都是在基本层次上人为的赋予数据不同的含义：比如字符类型，本质上在内存中存储的也是数字而不是字符，
打个比方，监狱里面每个犯人都有唯一编号，比如9527代表的是周星星；而在计算机世界，人们把目前已知的符号进行整理，进而为每个符号规定一个数字，当
告诉计算机一个数字的集合代表字符时候，计算机就会把数字转换为字符，所以字符本质上也是数字。其它类型会在下面的教程依次讲解。</p>
<p>当我们提及一个人时，根据分类标准的不同可以把人分成不同的类别，根据性别可以分为男人和女人；根据国别可以分为地球人和火星人等等。对于数据来
说，除了依据其类型把它分成上面的类型外，我们还根据一个数据会不会改变自己的值把数据分为常量和变量：比如举个不恰当的比方，你下载一个电影时，在下载
完成之前，存储这个电影的文件是个变量，但是一旦下载完成，这个文件就是常量了。在编程过程中，我们把在程序运行中不改变数值的量叫做<strong>常量</strong>，否则叫做<strong>变量</strong>。程序中的每个数据总是属于这两者之一，所以当我们需要使用数据时候，必须告诉计算机这个数据是常量还是变量，对应于实际的&#8220;单词&#8221;就是，使用<span style="color: #ff0000;">const</span>和<span style="color: #ff0000;">#</span><span style="color: #ff0000;">define</span>来告诉计算机，语法如下：<br>
1）定义一个数值为7的整数<br>
<span style="color: #008000;"><span style="color: #ff0000;">const</span> <span style="color: #0000ff;">int&nbsp;</span><span style="color: #000000;">DAY</span> <span style="color: #000000;">= 7;</span></span><br>
2）定义一个数值为7的符号<br>
<span style="color: #ff0000;">#define</span>&nbsp;DAY 7<br>
两者的区别在于前者可以指明数据类型，而后者则不能，推荐采用第一种方法定义常量。常量最好用全部大写字母组合表示，在C++中是区分大小写的。Day和day就表示不同的名称。</p>
<p>每一个变量对应一个内存单元，至于对应多大的单元要看是什么类型的变量，都叫单元楼，其大小还有不同呢。在计算机中基本的单元度量单位叫做比特
（bit），它可以存多少数字呢，0或1！你可以这样去理解，计算机内存由大量的灯泡组成的，灯泡亮表示1，不亮表示0，那么灯泡就是最基本的表示单位，
每个灯泡叫做一个比特(bit），这就是<a href="http://zh.wikipedia.org/zh-cn/%E4%BA%8C%E8%BF%9B%E5%88%B6" target="_blank">二进制</a>。我们的计算机大厦就是建立在一堆灯泡的二进制上，神奇吧：），据说是莱布尼兹从太极图得到启发后发现二进制的。但人们习惯的还是十进制，虽然有人习惯二进制，以至于搞出二进制表：<br>
<img src="http://www.figoyao.com/blog/wp-content/uploads/2009/11/p_large_m6dD_35e90003647c2d11.jpg" title="Watch" alt="Watch" height="279" width="200"><br>
有了二进制我们可以表示任何进制的数，计算机常用的进制有：<br>
<a href="http://zh.wikipedia.org/zh-cn/%E5%8D%81%E9%80%B2%E5%88%B6" target="_blank">十进制</a>：由0到9的数字组成，不能以0开始，如110，25；<br>
<a href="http://zh.wikipedia.org/zh-cn/%E5%85%AB%E9%80%B2%E5%88%B6" target="_blank">八进制</a>：由0到7的数字组成，以0（零）为前缀，如0125，098；<br>
<a href="http://zh.wikipedia.org/zh-cn/%E5%8D%81%E5%85%AD%E9%80%B2%E5%88%B6" target="_blank">十六进制</a>：由0到9和a到f（大小写均可）组成，以0x或0X（0为零）为前缀，如0&#215;1025，0X2009。<br>
在C++中后两者没有正负之分。并且<strong>在给变量及常量取名字的时候有如下限制</strong>：<br>
1）、只能以26个字母或下划线<span style="color: #ff0000;">_</span>为<strong>前缀</strong>；<br>
2）、前缀确定后，后面部分除了1）中范围还可以用数字组成。<br>
下面举几个例子：<br>
正确的：_gold、Blood、mana；<br>
错误的：<span style="text-decoration: line-through;">91China</span>、<span style="text-decoration: line-through;">5party</span>。</p>
<p>下面开始讲解数据类型的一些细节：<br>
1、整型（integral type），数值范围如下表：</p>
<table bgcolor="#ffffff" border="1">
    <tbody>
        <tr>
            <td>关键字</td>
            <td>字节(byte)</td>
            <td>范围</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>short (int)</td>
            <td>2</td>
            <td>-32768~32767</td>
            <td>-2^15~(2^15-1)</td>
        </tr>
        <tr>
            <td>unsigned short (int)</td>
            <td>2</td>
            <td>0~65536</td>
            <td>0~(2^16-1)</td>
        </tr>
        <tr>
            <td>int</td>
            <td>4</td>
            <td>-2147483648~2147483647</td>
            <td>-2^31~(2^31-1)</td>
        </tr>
        <tr>
            <td>unsigned int</td>
            <td>4</td>
            <td>0~4294967295</td>
            <td>0~(2^32-1)</td>
        </tr>
        <tr>
            <td>long (int)</td>
            <td>4</td>
            <td>-2147483648~2147483647</td>
            <td>-2^31~(2^31-1)</td>
        </tr>
        <tr>
            <td>unsigned long (int)</td>
            <td>4</td>
            <td>0~4294967295</td>
            <td>0~(2^32-1)</td>
        </tr>
    </tbody>
</table>
<p>上表中关键字一栏中括号中的表示可以省略；<strong>1byte = 8bit</strong>。</p>
<p>2、浮点类型（floating-point number type）<br>
有三种不同范围</p>
<table bgcolor="#ffffff" border="1">
    <tbody>
        <tr>
            <td>关键字</td>
            <td>字节(byte)</td>
            <td>大致范围</td>
        </tr>
        <tr>
            <td>float</td>
            <td>4</td>
            <td>10^(-38)~10^38</td>
        </tr>
        <tr>
            <td>double</td>
            <td>8</td>
            <td>10^(-308)~10^308</td>
        </tr>
        <tr>
            <td>long double</td>
            <td>16</td>
            <td>10(-4932)~10^4932</td>
        </tr>
    </tbody>
</table>
<p>在实际编程中，常用的是double。要表示float必给数字加上f或F后缀；要表示long double必给数字加上l(字母L的小写)或L后缀，如:<br>
float fHit = 329.78F;<br>
long double lbExp = 7894.45L;</p>
<p>3、字符类型（character type）<br>
上文中说了，字符本质上是整数通过对应关系在表示，由于计算机最初产生在邪恶的资本主义国家，主要是欧美语系，所以开始的时候没有考虑到伟大的天朝的象形文字，这就导致第一代整数-字符关系表如下：</p>
<div class="wp-caption alignnone" style="width: 810px;"><a href="http://yes.nctu.edu.tw/vb/9_Misc/ASCII_1.gif"><img src="http://yes.nctu.edu.tw/vb/9_Misc/ASCII_1.gif" title="ASCII" alt="ASCII" height="1144" width="800"></a>
<p class="wp-caption-text">ASCII</p>
</div>
<p>&nbsp;随着科技春风吹拂天朝大地，问题出来了，不是每个天朝子民都懂殖民语言English，为了解决这个办法，<a href="http://zh.wikipedia.org/zh-cn/Unicode" target="_blank">Unicode</a>被提了出来，本质上就是一张更大的表而已。等到人类统治火星的时候估计还会有比Unicode大的表出来。再后面，你会越来越多的见到Unicode这个单词。要定义一个字符，有以下2种方法：<br>
1）、char happy = &#8216;H&#8217;;<br>
2）、wchar_t happy = &#8216;乐&#8217;;<br>
区别在于，前者占用1个字节（byte），是ASCII；后者占2个字节（byte），而后者是Unicode。wchar_t是什么呢，其实就是
unsigned
short，自己看上面给出的范围，这个范围就是Unicode最多表示的符号个数范围。表示单个字符时候必须用单引号括起来或者给出符号对应的数值，比
如0&#215;41表示A，那么下面的定义是等价的，<a href="http://en.wikipedia.org/wiki/Shellcode" target="_blank">shellcode</a>经常用到：<br>
char set = &#8216;A&#8217;;<br>
char set = 0&#215;41;</p>
<p>&nbsp;4、布尔类型（bool type）<br>
布尔类型数据取值只有2个：真（true）或假（false）。主要用在程序中控制数据处理流程。<br>
声明一个bool变量如下：<br>
bool bLive = false;<br>
在实际的程序设计中，任何非零的量都被认为是true，否则为false。</p>
<p>5、void类型<br>
当你要定义一个不属于以上任何类型的数据时候，可以把它定义为void，其本质上是指针。</p>
<p>以上5种类型是最基本的数据类型，构造类型的数据将放在后续章节介绍。类型讲完后就轮到运算符了，像我们以前接触的<em>加减乘除</em>就属于运算符，在C++中涉及的运算符列表如下：</p>
<table bgcolor="#ffffff" border="1">
    <tbody>
        <tr>
            <td>运算符</td>
            <td>表示</td>
        </tr>
        <tr>
            <td>算术</td>
            <td>+、-、*、/、++、&#8211;、%</td>
        </tr>
        <tr>
            <td>关系</td>
            <td>&gt;、&gt;=、&lt;、&lt;=、==、!=</td>
        </tr>
        <tr>
            <td>逻辑</td>
            <td>&amp;&amp;[与]、||[或]、![非]</td>
        </tr>
        <tr>
            <td>赋值</td>
            <td>=、+=、-=、*=、/=</td>
        </tr>
        <tr>
            <td>逗号</td>
            <td>,</td>
        </tr>
        <tr>
            <td>条件</td>
            <td>? :</td>
        </tr>
        <tr>
            <td>位</td>
            <td>&lt;&lt;、&gt;&gt;、~、|、^、&amp;</td>
        </tr>
        <tr>
            <td>指针</td>
            <td>*、&amp;</td>
        </tr>
        <tr>
            <td>求字节数</td>
            <td>sizeof</td>
        </tr>
        <tr>
            <td>强制类型转换</td>
            <td>类型(变量)、(类型)变量</td>
        </tr>
        <tr>
            <td>下标</td>
            <td>[ ]</td>
        </tr>
        <tr>
            <td>分量</td>
            <td>.、-&gt;</td>
        </tr>
    </tbody>
</table>
<p>在后面的应用中会详细讲解，这里了解即可。<br>
今天暂时到这里，我会保持每天一篇左右的进度来完成这个<a href="http://www.figoyao.com/blog/2009/11/28/24/" target="_blank">系列的文章</a>。</p>
<p>转载请注明出处：<span id="sample-permalink"><a href="http://www.figoyao.com/blog/2009/11/28/34/" target="_blank">http://www.figoyao.com/blog/2009/11/28/34/</a></span></p><img src ="http://www.cppblog.com/figoyao/aggbug/104687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/figoyao/" target="_blank">Figo</a> 2010-01-03 15:25 <a href="http://www.cppblog.com/figoyao/articles/104687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>