Структурирование приложения с несколькими .h и .cpp

Рейтинг: 0Ответов: 1Опубликовано: 28.02.2015

Появилась небольшая сложность при разделении классов на несколько файлов. В .h указываю класс с прототипами и в соответствующем .cpp инициализирую методы и объекты. Имеется класс app, который использует все остальные классы, но тем не менее в этих используемых классах нужно обращаться к объектам текущего экземпляра класса app.

Делаю следующим образом: в app.h объявил класс с прототипами, в нем есть объявление экземпляров классов
material, control, objects.

Перед этим объявил, как бы не ошибиться в выражении, прототипы классов (чтобы на последлующем этапе .h не инклюдили сами себя через app.h).

class material;
class control;
class objects;

Другие .h имеют одинаковый характер использования, но в них же мне требуется класс app, поэтому делается инклюд на app.h

В app.cpp инклюдятся все .h, и в нем при инициализации каждого класса я передаю в них ссылку на текущий экземпляр app.

Является ли такой способ оптимальным? Особенно если речь идет о усложнении структуры приложения.

Ответы

▲ 2Принят

1) Почитайте про ifdef-guard или используйте #pragma once, если эта инструкция поддерживается Вашим компилятором. Это позволяет не думать о рекурсивных зависимостях при включении файлов.

2) Файлы .cpp в больших проектах включают в указанном порядке:

3) В файлы .h стараются писать как можно меньше #include'ов. Желательно обходиться объявлениями, как в вопросе:

    class material;
    // ...

#include приходится писать для классов, которые Ваш класс наследует или размещает по значению, а также для классов, которые передаются по значению как аргумент функции. Во всех этих случаях компилятору нужно знать размер объекта. Forward-declaration будет мало.