| 
 OK,下面让我们看一个简单的C++程序:>> 
/*------------------------------------------------->> 
                     First C++ Program>> 
 --------------------------------------------------*/>> 
> > 
#include <iostream> //现在你只需知道要使用输入输出语句就必须写这行。 
                      //这一行结尾不用加分号因为它不是真正的C++语句。 
                      //在1.3节将会对此做出解释。 
using namespace std; //这是什么意思呢…在1.2.3节会有解释。 
  
int a=5; //声明变量a,同时顺便赋5给它。C++中变量都需先声明后使用。 
            //int说明了a的数据类型为整数。 
        
int square(int x); //声明函数square,它有一个参数,为int类型,即整数。返回值也 
//为int类型。C++中的函数都需要先声明后给出定义。 
        
int square(int x) //函数真正定义。 
{ 
       return x* 
x; //返回x*x,可以在一个语句中的间隔位置插入回车将其分成几行。 
} 
  
int main( ) //主函数,每个DOS窗口下的C++程序都需要它 
{ 
       int A;                        //声明变量A。C++中变量声明的位置是比较随意的。 
       cout<<"请输入A:";        //输出"请输入A:",箭头的方向很直观。 
       cin>>A;                      //输入A, 注意箭头方向的更改。 
       cout<<"A="<<A<<endl;    //依次输出"A="、A的值并换行。endl代表换行。 
       cout<<"a+A="<<a+A; 
    cout<<"A*A="<<square(A); 
       return 0; //可以指示程序正常结束 
} 
  
运行程序的方法是按工具栏中部的小三角形。 
从这个程序中,我们可以看到C++程序的一些特点: 
(1)     区分大小写,关键字全部是小写的。 
(2)     每一行语句都需要用";"结尾。 
(3)     用"{"和"}"括起的句被称为块语句,形式上被认为是一个语句(就像PASCAL中的begin和end)。 
(4)     "//"至行尾为注释,"/*"至"*/"中全为注释,它们不会被编译。 
(5)     主体是由一个个函数所构成的。在1.6节将会详细地介绍函数。 
       对于十进制数的表示,C++与其它语言一致,同样可以使用科学记数法,如3.145e-4。在C++中还可以直接表示十六进制数,只要在前面加上"0x"即可。如0x23。如果要表示的是负十六进制数,可以直接在"0x"前加上负号。为了清楚说明一个数是float类型,我们可以在数的结尾加上"f",例如1.00f。否则,该数默认为double类型。 
       下面我们来看看C++中的基本数据类型: 
bool(逻辑型)  char(字符或8位整数)  short(16位整数) 
int(16位或32位整数)  long(32位整数)  float(32位浮点数)  
double(64位浮点数)  long double (80位浮点数) 
      bool类型用true和false代表真与假,其实际占用空间是8位。 
某一char类型的变量如果等于'a'(注意C++中字符用单引号,字符串用双引号),则它又等于a的ASCII码,即97。依此类推。 
int类型在DOS下一般为16位,在WINDOWS下一般为32位,如果想保险一点自己试试就知道了。 
      在整数数据类型前可加上"unsigned"表示为无符号数,数的范围可增大一倍。比如说char类型数据的范围是-128到127,unsigned char类型数据的范围则为0到255。 
使用sizeof( )可以得到任何对象占用的字节数,例如如果有一个char类型的变量a, 则sizeof(a)会返回1。 
      有的类型之间是可以自动转换的,如可以把一个float类型的变量的值赋给一个int类型的变量,小数点后的部分将会被自动截掉。如果不放心可使用强制类型转换,形式为(目标类型)变量名。比如说如果有一个char类型的变量 c值为'b',直接输出c会得到'b'这个字符但输出(int)c会得到'b'的ASCII码。强制类型转换不会改变变量的值(除非将一个浮点数转换为整数等情况),它只是返回转换后的值。注意字符串和整数之间不能用强制类型转换实现转换,办法在1.9节。 
       我们还可以借助typedef定义自己的数据类型,例如typedef myint unsigned int;后myint就等价于unsigned int。VC.net系统已经预先用typedef定义好了不少类型,例如BYTE等价于unsigned char,WORD等价于unsigned short,DWORD 等价于unsigned long等等。 
  
     C++中的变量几乎可在任何地方处定义,而且可以同时定义多个变量,如int a,b;。但每一个变量只在最紧挨它的一对{和}符号内起作用,只有在所有函数之外定义的变量才为全局变量,即在整个cpp文件中有效。如果局部变量和全局变量重名,调用时会使用局部变量,如果一定要使用那个全局变量,调用时在变量名前加上"::"即可。这里建议大家尽量少用全局变量,因为它可能使程序变得混乱和难于调试。 
      所有变量定义的前面均可加上修饰符"const"表示它是常量,不能在程序中改变它的值。其实如果我们不打算在程序中改变某变量的值,我们就可以把它声明为常量以防止意外改动。我们还可加上修饰符"static"表示此变量是静态变量,这个要举一个例子以方便说明:比如说在某一个函数内有这样一条定义:static int count=0; ,那么程序执行前就会为count这个变量开辟一块固定的空间并把count的初值设为0。以后每次执行这个函数时,程序不会象普通变量那样重新为它分配空间,也就是不会改变它的位置和数值,换句话说,它的生命周期与整个程序一样。这样只要在函数中再加一句count=count+1即可统计这个函数执行了多少次。 
  
       Namespace是一个挺有趣的东西,它的引入是为了方便我们使用相同名字的变量、常量、类(在第二章我们会接触类)或是函数。一个Namespace是这样定义的: 
       namespace xxx //xxx是namespace的名字 
       { 
              在这里可以像平常一样定义各种东西 
       } 
  
       以后要使用某个namespace中的东西,比如说xxx中的aaa,像这样:xxx::aaa即可。不过这样好像挺麻烦的----平白无故就多出了一个"xxx::"。于是有了"using namespace xxx;"这种语句,可以帮你省下这几个字符。记住,"using namespace"也只是在最紧挨它的一对{和}符号内起作用,在所有函数之外执行的这条语句才在整个文件中有效。注意: 
namespace s1 
{ 
       int a=0; 
} 
  
namespace s2 
{ 
       float a=0; 
} 
  
void main( ) 
{ 
       using namespace s1; 
       using namespace s2; 
       //a=a+1; //这句是错误的!因为编译器此时无法确定a在哪个namespace 
       s1::a = s2::a + 1; //这样就是正确的 
} 
  
       那么我们在第一个程序中为何要using namespace std;呢?其实也是为了把"std::cout"变成简洁一点的"cout"。请看1.3节。  |