五、結構體定義
ios
結構體是用戶帶定義的類型,而結構聲明定義了這種類型的數據屬性。定義了類型後,即可以建立這種類型的變量,所以建立結構包括兩步。首先,定義結構描述——它描述並標記了可以存儲在結構中的各類數據類型。而後按描述建立結構變量(街噶偶數據對象)。數組
5.一、定義結構後,即可以建立這種類型的變量了:數據結構
inflatable hat; inflatable woopie_cushion inflatable mainframe
若是熟悉C語言中的結構,則可能已經注意到了,C++容許在聲明結構變量省略關鍵字struct:函數
struct inflatable goose; //C語言結構體對象聲明,與C++結構體聲明均可以 inflatable Vincent; //只有C++結構體聲明能夠用
因爲hat的類型是inflatable,所以可使用成員運算符(.)來訪問各個成員。例如,hat.volume指的是結構的volume成員,hat.privce,指的是price成員。oop
#include "stdafx.h" #include <iostream> //引用庫函數 using namespace std; //使用命名空間 struct inflatable { char name[20]; float volume; double price; }; int main() //主函數,程序執行的入口 { inflatable guest = //結構體初始化 { "Glorios Gloria", //這裏的順序必需要與結構體定義順序一致 1.88, 29.99 }; //這裏必需要加分號 inflatable pal = { "wanghong", 3.12, 32.99 }; cout << "Expand your guest list with" << guest.name; cout << "and" << pal.name << "!\n"; cout << "you can have both for $"; cout << guest.price + pal.price << ".\n"; cin.get(); return 0; //函數返回值 }
結果:spa
程序說明:3d
5.二、結構體初始化對象
與數組同樣,C++也支持將列表初始化用於結構,且等號(=)是可選的:blog
inflatable duck {「Daphne」,0.12,6.64}
其次若是大括號爲包含任何東西,各個成員將被設置爲零,ci
inflatable duck {}; //結構體內全部值爲零 //最後,不容許縮窄變換。
5.三、結構體將string 類做爲成員
#include <string> struct inflatable { std::string name; //必定要讓結構定義可以訪問名稱空間std float volume: double price; };
5.四、其餘結構類型
C++使用戶定義的類型與內置類型儘量的類似,例如,能夠將結構體做爲參數傳遞給函數,也可讓函數返回一個結構體。另外,還可使用賦值運算符(=)將結構體賦值給另外一個同類型的結構。這樣結構中每一個成員都將被設置爲另外一個結構中相應成員的值,即便是數組。這種賦值稱爲成員賦值
inflatable doubj { 「asfdasf」, 0.52, 12.51 } inflatable choice; choice = doubj;//成員賦值
能夠同時完成結構體建立和建立結構體對象的工做(將變量名放在結束括號的後面便可):
struct perks { int key_number; char car[12]; }mr_smith,ms_jones;//兩個結構體對象。
甚至能夠初始化以這種方式建立的變量:
struct perks { int key_number; char car[12]; }mr_smith = { 7, "dsfasdasd" };
然而,將結構體定義和變量聲明分開,能夠是程序更容易於閱讀與理解。
5.五、結構數組
inflatable—結構包含一個數組(name)。也能夠建立元素爲結構體的數組,方法和建立基本類型數組徹底相同。例如,要建立一個包含100個inflatable結構的數組,能夠這樣作:
inflatable gifts[100];//100 個inflatable結構體數組
這樣gifts將是一個inflatable數組,其中的每一個元素(如gifts[0]或gifts[99])都是inflatable對象能夠與成員運算符一塊兒使用。
cin>>gifts[0].volume; cout<<gifts[99].price<<endl;
記住gifts自己是一個數組,而並非結構體,所以像gifts。price這樣的表述是無效的。
#include "stdafx.h" #include <iostream> //引用庫函數 using namespace std; //使用命名空間 struct inflatable { char name[20]; float volume; double price; }; int main() //主函數,程序執行的入口 { inflatable guests[2]= { {"Bambi",0.5,21.55}, {"Goodzilla",2000,654.214} }; cout << "The guests" << guests[0].name << "and" << guests[1].name << "\nhave a combined volume of " << guests[0].volume + guests[1].volume << " cubic feet.\n"; cin.get(); return 0; //函數返回值 }
結果:
5.六、結構體中的位字段
與C語言同樣,C++也容許指定佔用特定位數的結構成員,這使得建立於某個硬件設備上的寄存器對應的數據結構很是方便。字段的類型爲整型或枚舉類型,接下來是冒號,冒號後面是一個數字,它指定了使用的位數。可使用沒有名稱的字段來提供間距。每一個成員都被稱爲字段。下面是一個例子:
struct torgle_register { unsigned int SN : 4; //4 bit 爲SN的值 unsigned int : 4; //4 bit爲空白的佔位 bool goodIn :1; bool goodTorgle : 1; }
初始化結構體,和訪問結構體與標準方法相同。