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 fi
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.