C++自定義數據類型


C++中有以下幾種自定義數據類型方式:typedef、union、enum

typedef

typedef只是用於重命名一種已有的數據類型。

typedef char C;                //C c即char c 
typedef char field [50];       //field s即char[50] 

注意第二種用法,數組的維數[50]是寫在最后的。

union

union中的每個成員共享同一段內存(每個成員的起始內存位置都是一樣的),整個union的大小取決於最長的成員的大小。

union mix_t
{
    long l;
    struct 
    {
        short hi;
        short lo;
    }s;
    char c[4];
}mix;

這個union的內存示意圖如圖下所示(注意32位機器上,char為1byte,short為2bytes,long為4bytes)

 

匿名union

非匿名union(union的名字為price)

struct 
{
    char title[50];
    char author[50];
    union 
    {
        float dollars;
        int rmbs;
    } price;
} book;

匿名union(union沒有名字)

struct 
{
    char title[50];
    char author[50];
    union 
    {
        float dollars;
        int rmbs;
    };
} book;

那么這兩種結構的不同就是元素的訪問方式不同,假如我們要訪問dollars這個元素,第一種是book.price.dollars,第二種是book.dollars。

 

enum

枚舉類型,其中枚舉值是常量,而不是變量。

enum days{Mon, Tue, Wed, Thur, Fri, Sat, Sun};
days today = Mon;

其中Mon其實是0,Tue是1,以此類推。

當然Mon不一定要從0開始,所以可以這樣寫……

enum days{Mon=1, Tue, Wed, Thur, Fri, Sat, Sun};

其中Mon是1,Tue是2,以此類推。

之前一直犯一個錯誤,直到今天(2015年4月11日)看objc的時候才發現,

enum days{Mon, Tue=2, Wed};  //0 2 3
cout << Mon << endl;  //輸出0而不是1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM