В какой файл мы помещаем функцию, не являющуюся членом C++?

Какова обычная практика, когда речь заходит о функциях, не являющихся членами в C++? Помещаем ли мы их в main.cpp или в заголовочный файл или в файл реализации класса, или мы создаем для него отдельный файл.cpp? Если обычной практикой является создание отдельного файла, то куда мы помещаем заголовок функции, не являющейся членом (прототип)? Это идет только в main.cpp или в обоих из них?

3 ответа

Решение

Я бы сказал, что вы не должны относиться к функциям, не являющимся членами, иначе, чем к классам, функциям-членам и другим символам.

Вы должны создать отдельный заголовочный файл .h и соответствующий исходный файл .cpp для каждого логического компонента (модуля) вашего приложения.

Все общедоступные символы должны быть объявлены / определены в заголовочном файле (будь то функции, не являющиеся членами или иным образом), а все непубличные символы и все необходимые определения должны быть в исходном файле.

Короче говоря, группируйте по логическим компонентам программы, а не по типу символа / функции.

Ваш класс должен иметь свой собственный файл.cpp. Функции, не являющиеся членами, должны помещаться в другие файлы (все вместе или сгруппированные по сходству). Это соглашение здесь, в Северной Америке, но соглашения отличаются. Прототип просто должен войти в заголовочный файл, чтобы вы могли включать его везде, где вы его используете.

Общая идея в псевдокоде:

if (it will be used in other cpp files) 
    put the declaration in a header file. 
    implement it in a header or a cpp file.
else 
    if (only need it in some functions in a header file)
        if (it's a function more than N line )  // please define this N in your mind
            declare it in the same header and implement it in a cpp file
        else
             put it in the same header file
    else // used in cpp only
        put it in the cpp file

Пока он компилируется, вы должны учитывать удобочитаемость (легко читаемую) и доступность (легко найти и отладить).

Другие вопросы по тегам