1. 程式人生 > >C++菜鳥學習筆記系列(6)——簡單標頭檔案的編寫

C++菜鳥學習筆記系列(6)——簡單標頭檔案的編寫

C++菜鳥學習筆記系列(6)

——簡單標頭檔案的編寫

我們在上一篇部落格 C++菜鳥學習筆記系列(5)中已經敘述了一些關於在C++中建立自己的資料型別的一些方法,但是隨之而來的一個問題是我們在建立了一個自定義類之後經常還要在其他的檔案中使用同樣的類,這時候我們可以在每個檔案中都重新進行定義,但是這是十分麻煩的,給我們的程式碼帶來很多冗餘。

那麼為了能夠解決這個問題,C++為我們提供了編寫標頭檔案的功能,我們可以實現各原始檔中類的定義一致,而且為了更好的表示和記憶,標頭檔案和類的名字通常保持一致。例如,庫型別 string 定義在名為 string 的標頭檔案中。所以書接上回,我們本次就要嘗試定義一個Sale_data.h標頭檔案,並在這個標頭檔案中進行 Sale_data 資料型別的定義。

/*
Author: wxc_1998
Date: 2018/9/26
*/
#ifndef SALE
#define SALE
#include <string>
using namespace std;

struct Sale_data
{
	string bookNo;
	unsigned int unit_sold;
	double revenue;
	double price;
};
#endif

我們首先看到的

#ifndef SALE
#define SALE
...
...
#endif

這樣的結構是C++程式實現預處理功能的標頭檔案保護符,標頭檔案保護符依賴於預處理變數。預處理變數有兩種狀態:未定義和已定義。 #define SALE 是把 SALE 指定為預處理變數。 #ifndef SALE

#endif 是檢查某個指定變數(SALE)是否已經定義,若變數未定義,則為真,執行其之間所包含的操作。而當我們執行了#define SALE之後 SALE變數被指定為預處理變數,則判斷為假,直接跳過之間的操作。

注意:使用這些功能可以避免重複包含的情況出現,整個程式中的預處理變數包括標頭檔案保護符必須唯一,通常的做法是基於標頭檔案中的類的名字來構建保護符的名字,以確保其唯一性。為了避免與程式中的其他實體發生名字衝突,一般把預處理變數的名字全部大寫。

其實這些功能對於我們現在來說來沒有太多的用處,這是因為我們還沒有在另一個自定義標頭檔案中引用此檔案。但是標頭檔案保護符的設定十分簡單,我們只要習慣性的加上就可以了沒有必要太在乎我們具體是否需要,反正不會造成什麼錯誤。

那麼我們在標頭檔案中定義了屬於我們自己的資料結構型別Sale_data 之後,我們應該怎樣去使用它呢?

#include "Sale_data.h"

我們只需類似於引用已定義的庫檔案就可以了,不過在這裡我們要注意在引用我們自定義的標頭檔案時要使用“”而不是<>而且檔名不要忘記了字尾 .h 。

之後後續的使用方法(C++菜鳥學習筆記系列(5))就和在原始檔中定義的資料型別相同了。

我們直接附上原始碼: Sale_data.h

/*
Author: wxc_1998
Date: 2018/9/26
*/
#ifndef SALE
#define SALE
#include <string>
using namespace std;

struct Sale_data
{
	string bookNo;
	unsigned int unit_sold;
	double revenue;
	double price;
};
#endif

main.cpp

/*
Author: wxc_1998
Date: 2018/9/26
*/

#include <iostream>
#include <string>
#include "Sale_data.h"

using namespace std;



void main()
{
	Sale_data data1 , data2 , *salesptr ;
	
	cin >> data1.bookNo >> data1.unit_sold >> data1.price ;
	cin >> data2.bookNo >> data2.unit_sold >> data2.price ;

	data1.revenue = data1.unit_sold * data1.price;
	data2.revenue = data2.unit_sold * data2.price;

	if ( data1.bookNo == data2.bookNo )
	{
		unsigned int total_num = data1.unit_sold + data2.unit_sold;
		double total_rev = data1.revenue + data2.revenue;
		
		if (total_num != 0)
		{
			cout << "ISBN_Number   "  << "total_number   " << "total_revenue   " << endl;
			cout << data1.bookNo  << "   "  << total_num << "   "  << total_rev << endl ;
		}
	}
	else
	{
		cout << "there is two kinds books" << endl;
		cout << "ISBN_Number   "  << "price   " << "number   " << "revenue   " << endl ;
		cout << data1.bookNo  << "   "  << data1.price << "   "  << data1.unit_sold << "   " << data1.revenue<< endl ;
		cout << data2.bookNo  << "   "  << data2.price << "   "  << data2.unit_sold << "   " << data2.revenue<< endl ;
		cout << "total revenue : " << data1.revenue + data2.revenue ;
	}

	cout << endl << "press any key to continue!" << endl;
	cin.clear();
	cin.sync();
	cin.get();

}

好了本次的部落格就寫到這裡了。

注:雖然這篇部落格的內容十分簡單,但是大家若有轉載還請標明出處!

還有大家若對部落格中的內容有任何問題可以隨時聯絡我提問。

在這裡插入圖片描述