5、C++結構體的使用


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;
}

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

 


免責聲明!

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



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