C++語言基礎 一、C++文件的構成 1、頭文件 在創建MFC應用時,類向導會為每個頭文件添加宏定義,例如: #if !defined(AFX_ODBCVIEW_H__B82AC4A2_3DBE_4A29_A549_F9939BE498E3__INCLUDED_) #define AFX_ODBCVIEW_H__B82AC4A2_3DBE_4A29_A549_F9939BE498E3__INCLUDED_ 宏定義的目的是防止頭文件被重復引用,當編譯器編譯頭文件時,判斷當前宏是否被定義,若沒定義則進行定義,並編譯頭文件,否則略過當前頭文件 a、引用頭文件 使用<>格式引用系統的頭文件,例如#include <iostream.h> 使用""格式引用自定義頭文件,例如#include "student.h" b、頭文件中只提供聲明信息 C++中允許使用內聯函數,將函數的聲明和實現放在一起,但是,這樣做不容易形成一套風格,建議在頭文件中只提供聲明信息,在源文件中提供實現信息,使程序的邏輯結構更加清晰 2、源文件 以.cpp為擴展名,源文件中通常包含3部分內容,即源文件版權,版本的聲明,對頭文件的引用,以及系統功能的實現代碼 二、C++的基本要素 1、標識符 在C++語言中,變量、常量、函數、標簽和用戶定義的各種對象,被稱之為標識符 標識符由一個或多個字符組成,標識符可以是字母、數字或下劃線,但是標識符的首字母必須是字母或下劃線,而不能是數字 標識符是區分大小寫的,且不能與C++中的關鍵字同名 標識符的長度是任意的,但前1024個字符是有意義的 a、不同類型的對象使用類型作為標識符的前綴 例如:我們定義了一個整型變量,為了表示變量的類型,使用小寫字符n做為前綴 int nAge;//年齡 int nKindCout;//種類數量 b、成員變量使用m_作為前綴 在定義類的成員變量時,成員變量以m_作為前綴,例如: m_nAge; m_nSize; c、類名以C作為前綴 例如:class CStudent; class CPerson; d、全局對象以g_作為前綴 例如:g_Connection; g_Recordset; e、接口以I為前綴 例如:IUnknown; IInterface; 2、關鍵字 關鍵字是C++編譯器內置的有特殊意義的標識符,用戶不能定義與關鍵字相同的標識符,在VC中,關鍵字默認都是以藍色顯示的 3、常量 常量,顧名思義,其值在運行時是不能改變的,但是在定義常量時可以設置初始值,在C++中可以使用const來定義一個常量,例如:const int nMaxValue=1100; 對於常量,編譯器會將其放置了一個只讀的內存區域,其值不能被修改,但是可以應用在各種表達式中,如果用戶試圖修改常量,編譯器將提示錯誤 4、變量 其值可以改變的量叫變量,變量提供了一個具有名稱(變量名)的存儲區域,使得開發人員可以聽過名稱來對存儲區域進行讀寫。每一個變量,都具有兩個屬性,也就通常所說的左值和右值,所謂左值,是指變量的地址值,即存儲變量值的內存地址,右值是指變量的數據值,即內存地址中存儲的數據。 例如:int a,b,c; 變量初始化,即為其設置初始值 例如:int a=10; 5、變量的存儲類型 a、extern存儲類型 在此之前,先搞明白,變量的聲明和定義 變量的聲明:是告知編譯器變量的名稱和數據類型 變量的定義:將為變量分配存儲區域 使用extern關鍵字定義的變量:表示該變量只聲明而不定義。 例如:extern int var; 好處:在一個應用程序包含多個文件時,如果在一個文件中定義一個全局變量,若其他文件中要訪問該全局變量,則在另一個文件中通過使用關鍵字extern聲明該全局變量,那麼在該文件中就可以訪問該全局變量了。 例如:一個文件中定義一個整型的全局變量var; int var=0; 而在另一個文件中通過extern關鍵字聲明全局變量var,在該文件中就可以訪問全局變量var了。extern int var; b、static存儲類型 在此之前,先明白,局部變量和全局變量 局部變量:是指在函數內定義的變量,在函數調用結束後,局部變量將消失 全局變量:是指在函數體外定義的變量,它的聲明周期隨著程序的結束而結束 static存儲類型主要是針對局部變量的,如果定義一個靜態的局部變量,它的聲明周期在函數調用結束後依然存在,下次調用函數時,會依然保存上一次函數調用之後的值,並且,對於靜態變量只執行一次初始化 static存儲類型表示變量在函數或文件內是“持久性”變量,通常也被稱為靜態變量。 全局靜態變量:使用static在函數外部定義的變量,它的作用域僅限於當前定義的文件,不能夠被其他文件使用extern關鍵字訪問,可以認為靜態全局變量為半個全局變量(不能夠被其他文件共享) 局部靜態變量:使用static在函數內部定義的變量,當函數調用結束時,變量並不被釋放,依然保留其值,當下一次調用函數時,將應用之前的變量值,它的作用域時當前函數,它不能被外部函數或文件訪問。 c、register存儲類型 www.2cto.com 使用register關鍵字定義的變量,表示變量將被放置在CPU的寄存器中。訪問的時候比普通的變量快,register變量只能用於局部變量或作為函數的形式參數、而不能夠定義全局的register,例如: register int slocal=10; 對於寄存器變量,程序中不能獲得變量的地址,也不能夠稱為全局變量和靜態變量。但可以作為函數的形式參數 d、auto存儲類型 變量的存儲方式主要有兩種,靜態存儲和動態存儲。 全局變量、靜態變量均屬於靜態存儲,而普通的局部變量屬於動態存儲 auto關鍵字表示變量被動態存儲,默認情況下的局部變量均屬於auto變量(也稱為自動變量),定義一個全局的auto變量是非法的,因為全局變量屬於靜態存儲,與auto變量相互沖突 注意:在定義變量時,不能同時使用register、extern、static和auto4個關鍵字中的任意兩個關鍵字。