2017-02-05 6 views
-3

Попытка разработать понимание функционирования библиотеки SDFat для Arduino IDE. Я наткнулся на эти строки кодов в файле заголовка 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) Что делает :public Fatfile в строке # 4.

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 i.e SdBaseFile is-a Fatfile. Вы можете использовать Fatfile *, чтобы указать на объекты SdBaseFile.

  2. Существует два типа конструкторов: один не принимает никаких аргументов, а другой принимает два аргумента, эти два аргумента фактически передаются базовому классу, из которого был получен этот класс SdBaseFile.

2
  1. :public Fatfile означает, что класс SdBaseFile наследует от класса FatFile
  2. Класс может иметь несколько конструкторов (это не только C++, но большинство объектно-ориентированные языки, насколько я знаю). Когда вы используете класс SdBaseFile, вы можете выбрать любой из этих конструкторов.
1

помните, что 'SdBaseFile() {}' является конструктором по умолчанию. Это всегда определяется в классе, и обычно, когда фреймворк не хочет, чтобы конструктор по умолчанию называл его, он будет частным конструктором.

другой конструктор, кажется, то, что вы хотите использовать. Поскольку конструктор по умолчанию, похоже, не делает ничего, кроме создания класса без связанного с ним файла. Мое впечатление от этого изменилось бы, если бы я знал, что было в классе FatFile.

+1

Конструктор по умолчанию не всегда определен: при пропуске компилятор предоставит вам только конструктор по умолчанию, если вы не определяете каких-либо других конструкторов. –