Заголовочные файлы C ++, конструкторская логика, простые методы get / set - PullRequest
0 голосов
/ 23 сентября 2010

Каковы мысли о разрешении простых определений конструктора / метода в заголовочных файлах в C ++.Некоторые классы, которые я создаю, являются простыми объектами данных, которые составляют другой объект, скажем, поэтому им нужен собственный конструктор и методы get / set.Однако обычно это <3-4 строки каждая с конструкторами, использующими списки инициализации.Можно ли просто иметь .h для этих классов ??1001* <p>UPDATE :: Как насчет того, где хранить файлы .h, в отдельном каталоге из файлов cpp?

Ответы [ 6 ]

6 голосов
/ 23 сентября 2010

Я бы проголосовал за только размещения объявлений в вашем заголовочном файле. Это сделает заголовочный файл более чистым (реализация не загромождает ваш взгляд). Пользователь может просматривать заголовочный файл для просмотра интерфейса, не сталкиваясь с нерелевантными деталями реализации.

Размещение определений (в отличие от объявлений) в вашем заголовочном файле также может вызвать ошибки компоновщика (как упомянуто Captain Comic). Может быть, не сейчас, но наверняка, когда вы расширяете свой код.

Кроме того, явное отделение объявления от определения (давайте забудем о шаблонах и встроенных функциях здесь) также работает в направлении более «совершенной» модели. Код будет полностью модульным в отдельных исходных файлах. Исходя из моего личного опыта, это требует времени и заботы, но является последовательным и позволяет избежать ошибок компоновщика и т. Д.

Конечно, если вы пишете быстрое приложение, никто больше не увидит ... никто не будет критиковать;)

2 голосов
/ 23 сентября 2010

Пойдите для этого.

Если вы хотите получить лучший ответ, уточните свои проблемы, почтовый индекс и т. Д.

1 голос
/ 24 сентября 2010

Я помещаю файлы .h в тот же каталог, что и файлы .cpp.В любом случае они связаны, так зачем их разбивать?!

В IDE гораздо проще найти соответствующий файл, если вы хотите перейти между объявлением (в foo.h) и определением (в foo.cpp).

Только для внешних заголовков, то есть тех заголовков, которые используются внешними проектами, я могу создать отдельную папку.

0 голосов
/ 24 сентября 2010

Я задал этот же вопрос своему профессору несколько часов назад, когда он выступал за помещение нескольких геттеров в файл .h, который был чужд мне как программисту на Си.

Он сказал, что одна из целей файла .h - дать краткий обзор класса. Если вы когда-либо программировали на Java, вы, вероятно, создали или прочитали несколько огромных классов, и поиск определенной функции может быть проблемой. Хороший текстовый редактор с возможностями складывания или IDE с контурным представлением может помочь вам справиться с этой проблемой, но это не всегда доступно. Вероятно допустимо однострочное получение / установщик или инициализирующий конструктор, который не замедлит работу читателя.

0 голосов
/ 24 сентября 2010

Иногда все зависит от IDE или среды, в которой вы разрабатываете код.Обычно

/source-tree
       /bin -------> executables or lib or dlls 
       /h -------> headers 
       /source -------> source codes 
       /Makefile -------> The root make file

Теперь о структуре кода, это зависит от того, что вы разрабатываете.Если некоторые API для какого-либо контейнера данных, который будет использоваться в разных модулях, это что-то вроде, -

Заголовочные файлы ------->

//ICoordinate.hpp
template <class T>
class ICoordinate
{
    public:
        virtual ~ICoordinate() {}
        virtual void SetX(T ) = 0;
        virtual void SetY(T ) = 0;
        virtual T    GetX(void) = 0;
};
// Co-ordinate system for ploting decimal points :-)
// class template specialization.
template <>
class ICoordinate<int>
{
    public:
        virtual ~ICoordinate() {}
        void SetX(int );
        void SetY(int );
    private:
        int x,y;
};

Исходный файл --------->

// DecimalCoordinate.cpp
// Implementation for DecimalCoordinate

Если у вас нет проблем с задержкой поиска в vtable, вы всегда можете определить некоторые чисто виртуальные методы (именно то, что я сделал здесь).Есть пост по поводу интерфейса объявление .

0 голосов
/ 23 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...