Сундук состоит из сокровищ.
Я реализовал это следующим образом:
treasure.hpp
#pragma once
class Treasure{
public:
protected:
private:
//data members
int gold;
};
chest.hpp
#pragma once
class Chest{
private:
#include "treasure/treasure.hpp"
public:
protected:
private:
//data members
Treasure treasure;
};
** Предположим, что оба заголовочных файла скомпилированы с соответствующими им «.cpp» для создания объектных файлов. *
Уместно ли включать заголовочный файл для сокровищ в объявление класса сундука?
Это имеет смысл для меня, потому что я получаю следующее поведение:
** Главная не может создавать или напрямую доступ к Сокровищам. *
#include "chest.hpp"
int main(int argc, char** argv){
Chest chest;
}
Я никогда не видел это таким образом, поэтому я не уверен, что это плохая практика.
Что касается состава, какой метод является предпочтительным:
я мог бы #include "treasure.hpp"
в верхней части груди.hpp до Chest
объявление класса .. Не все сокровища найдены в сундуке. Если main()
хочет создать Сокровище, которое не находится в Chest
Это должно быть разрешено.
С другой стороны, я, конечно, могу представить времена, когда частный класс был бы полезен. В такой ситуации я бы кодировал закрытый класс непосредственно внутри внешнего класса, а не включал его.
Я хотел бы, чтобы основной включить файл косвенно (сокровища включают в верхней части сундука). Не имеет большого смысла иметь несколько включений. Фактически, это одно из основных применений этих директив прекомпилятора; чтобы предотвратить ошибки компиляции из-за многократного включения файла.
Если вы сделаете это иначе, вы не сможете делать такие вещи, как; создайте новое сокровище и добавьте его в свой сундук или извлеките сокровище из своего сундука и работайте с ним независимо. Эта реализация будет иметь смысл только в том случае, если объект B используется исключительно объектом A.