五、C++結構體的使用

五、結構體定義
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;
}

  初始化結構體,和訪問結構體與標準方法相同。

相關文章
相關標籤/搜索