2017-02-05 92 views
-3

試圖瞭解Arduino IDE的SDFat庫的功能。我偶然發現了SDfat.h頭文件中的這些代碼行。瞭解C++中的類聲明

/** 
1* \class SdBaseFile 
2* \brief Class for backward compatibility. 
3*/ 
4 class SdBaseFile : public FatFile { 
5 public: 
6 SdBaseFile() {} 
7 /** Create a file object and open it in the current working directory. 
8 * 
9 * \param[in] path A path for a file to be opened. 
10 * 
11 * \param[in] oflag Values for \a oflag are constructed by a 
12 * bitwise-inclusive OR of open flags. see 
13 * FatFile::open(FatFile*, const char*, uint8_t). 
14 */ 
15 SdBaseFile(const char* path, uint8_t oflag) : FatFile(path, oflag) {} 
16 }; 

如果有人能請解釋一下我這個類的聲明是如何工作的。

1)第#4行中的:public Fatfile是做什麼的。

2)爲什麼第6行和第15行有兩個構造函數(如果是這樣的話)。

我的理解受到這裏定義/聲明缺乏語法理解的限制。感謝幫助。

感謝

+3

1.它表示該類是從另一個名爲FatFile的類派生的。 2.這個類可以用兩種方式實例化,所以有兩個構造函數。我建議你閱讀一本關於C++的好書 –

+2

任何C++教程/書都會詳細回答這些問題。 1)繼承。 2)是的,它們是構造函數,第一個是默認構造函數,另一個是構造函數,它接受輸入來打開文件 –

+1

閱讀繼承和函數重載。有關圖書推薦,請參閱[這裏](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 –

回答

2
  1. :public Fatfile意味着SdBaseFile公開從Fatfile繼承。 這實際上稱爲is-a關係,即SdBaseFile是-a Fatfile。您可以使用Fatfile *指向SdBaseFile的對象。

  2. 有兩種類型構造的,一個不帶任何參數,而另一個採用兩個參數,這兩個參數都實際上傳遞給作爲此類SdBaseFile所導出的基類。

2
  1. :public Fatfile意味着從類的類SdBaseFile繼承FatFile
  2. 一個類可以有多個構造函數(這不僅是C++,但多數面向對象的語言,因爲據我所知)。當您使用類SdBaseFile時,您可以選擇任何這些構造函數。
1

請記住'SdBaseFile(){}'是默認的構造函數。這總是在一個類中定義的,通常當一個框架不希望被調用的默認構造函數時,它將是一個私有構造函數。

其他構造函數似乎是你想要使用的。由於默認的構造函數似乎沒有做任何事情,除非構造一個沒有與它關聯的文件的類。如果我知道FatFile類中的內容,我的印象就會改變。

+1

默認的構造函數並不總是被定義的:當省略時,如果你沒有定義任何其他的構造函數,編譯器將只爲你提供一個默認的構造函數。 –