5、結構體定義
結構體是用戶帶定義的類型,而結構聲明定義了這種類型的數據屬性。定義了類型后,便可以創建這種類型的變量,因此創建結構包括兩步。首先,定義結構描述——它描述並標記了能夠存儲在結構中的各種數據類型。然后按描述創建結構變量(街噶偶數據對象)。

5.1、定義結構后,便可以創建這種類型的變量了:
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成員。
#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; //函數返回值
}
結果:

程序說明:

5.2、結構體初始化
與數組一樣,C++也支持將列表初始化用於結構,且等號(=)是可選的:
inflatable duck {“Daphne”,0.12,6.64}
其次如果大括號為包含任何東西,各個成員將被設置為零,
inflatable duck {}; //結構體內所有值為零
//最后,不允許縮窄變換。
5.3、結構體將string 類作為成員
#include <string>
struct inflatable
{
std::string name; //一定要讓結構定義能夠訪問名稱空間std
float volume:
double price;
};
5.4、其他結構類型
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.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.6、結構體中的位字段
與C語言一樣,C++也允許指定占用特定位數的結構成員,這使得創建於某個硬件設備上的寄存器對應的數據結構非常方便。字段的類型為整型或枚舉類型,接下來是冒號,冒號后面是一個數字,它指定了使用的位數。可以使用沒有名稱的字段來提供間距。每個成員都被稱為字段。下面是一個例子:
struct torgle_register
{
unsigned int SN : 4; //4 bit 為SN的值
unsigned int : 4; //4 bit為空白的占位
bool goodIn :1;
bool goodTorgle : 1;
}
初始化結構體,和訪問結構體與標准方法相同。
