複製鏈接
請複製以下鏈接發送給好友

複合類型

鎖定
計算機科學中,複合類型是一種數據類型,它可以原始類型和其它的複合類型所構成。構成一個複合類型的動作,又稱作組合。
中文名
複合類型
外文名
Composite data type
學    科
計算機科學

複合類型C/C++

主條目:C++類
struct是C和C++的複合類型概念,是一個將字段成員以一定組合方式所組成的數據類型 [1]  。因為在宣告時,使用了關鍵字struct,所以它簡稱為結構,或者更精確地説用户定義的數據結構。
在 C++ 裏,struct與class的唯一區別是默認的訪問檔次,class是私有的,struct則是公有的。
注意儘管類的概念和關鍵字class是C++新引入的,C語言也已具備粗糙的struct類型。對於所有的意圖和目的, C++ 的struct是 Cstruct的超集:幾乎所有合法的 Cstruct也是合法的 C++struct,並有着相同的語義。
struct宣告組成一個字段清單,其中的每一個可以是任意類型。對於struct對象所需的存儲區,即為全部字段的總合,再加上內部的補白。
例如:
struct Account {    
    int account_number;   
    char *first_name;    
    char *last_name;    
    float balance; };
定義一個稱為struct Account的類型。若要創建此類型的新變量,可以寫為struct Account myAccount;,它有一個以myAccount.account_number訪問的整數組件,且有一個以myAccount.balance訪問的浮點數組件,以及first_name和last_name組件。myAccount包含這四個數值,且這四個字段可各自改變。由於struct account的寫法有些累贅,在 C 代碼中,typedef語句並不罕見,其為struct提供一個更簡便的同義詞。例如:
typedef struct Account_ {    
           int  account_number;    
      char   *first_name;    
      char   *last_name;    
      float  balance; } Account;
在 C++ 中,並不需要typedef,因為使用了struct的類型定義,已是名字空間的一部分,所以該類型可稱作struct Account或較簡單的Account。
其它例子,一個使用了浮點數數據類型的三維向量複合類型,可如此創建:
struct Vector {  
        float x;   
            float y;   
            float z; };
一個以Vector複合類型為類型的變量名velocity,可以宣告為Vector velocity;,可以用點運算符(.)訪問velocity的成員。例如,velocity.x = 5;,會使velocity的組件x等於 5。
同樣地,一個顏色結構可如此創建:
struct Color {   
         int red;  
               int green;   
              int blue; };

複合類型原始子類型檢查

剛開始使用的struct,是用來建構組合數據類型,不過有時它是用來避開標準 C 協議,以創建原始子類型檢查(primitive subtyping)。例如,共同的網絡協議依賴於以下事實,C 編譯器以可預料的方法,在結構字段之間補白;因此代碼
struct ifoo_old_stub {  long x, y; }; 
struct ifoo_version_42 { 
    long x, y, z;    
    char *name;   
    long a, b, c; };
void operate_on_ifoo(struct ifoo_old_stub *); 
struct ifoo_version_42 s;
將可正確運作。
參考資料
  • 1.    Howe, Denis. "The Free On-line Dictionary of Computing". Dictionary.com. Retrieved 1 February 2016.