W aplikacji reprezentujemy pliki i katalogi (foldery) systemu plików przez obiekty File i Dir, pokazane niżej. System plików pozwala na zagnieżdżone katalogi.

class File {
public:
  File(std::string n, int s) : name_(n), size_(s) {}
  std::string getName() const { return name_; }
  int getSize() const { return size_; }
  ~File(){}
private:
  std::string name_;
  int size_;
};

class Dir {
  using Child = File*;
  using Children = std::vector;
public:
  Dir(const std::string& n) : name_(n) {}
  ~Dir() {
    for(Child c : ch_) delete c;
  }
  std::string getName() const { return name_; }
  int getSize() const {
    int s = 0;
	for(Child c : ch_) s += c->getSize();
	return s;
  }
  void add(Child el) { ch_.push_back(el); }
private:
  std::string name_;
  Children ch_;
};

Proszę odpowiedz na poniższe pytania:

  1. Popraw kod klas, aby można było reprezentować zagnieżdżone katalogi. Skopiuj kod klasy File i kod klasy Dir i zmodyfikuj go, jeżeli jest to potrzebne. Twój kod nie musi się kompilować, ale powinno w nim być widać rozwiązanie.
  2. Czy zastosowałeś jakiś obiektowy wzorzec projektowy (tak/nie)? Jeżeli tak, napisz jego nazwę.
  3. Czy jest możliwe uwzględnienie maksymalnego poziomu zagnieżdżeń katalogów? Jeżeli tak, jak byś to zrobił dla systemu plików CP/M, który ma maksymalny poziom zagnieżdżeń katalogów równy 8.