What is the normal practice when it comes to non-member function in C++? Do we put them in main.cpp or header file or class implementation file, or do we make a separate .cpp file for it? If the normal practice is to make a separate file, then where do we put the non-member function header(prototype)? Does it only go in main.cpp or in both of them?
I would say you should not treat non-member functions differently to classes and member functions and other symbols.
You should create a distinct header file .h
and a corresponding source file .cpp
for each logical component (module) of your application.
All public symbols should be declared/defined in the header file (whether they be non-member functions or otherwise) and all non-public symbols and all required definitions should go in the source file.
In short, group according to logical program components, rather than by the type of symbol/function.