Big words.. scary
I'll try to sum that up:
Each .cpp file is compiled into a separate object file, so that only .cpp files that have been modified need to be re-compiled, to save time (and possibly gray hairs).
If in the main cpp you want to use functions that are defined in other .cpp files, the compiler won't know what to do unless you tell it what parameters the function takes, and what it returns; you do this (tell the compiler the parameters and return type) by declaring the function 'prototype', like so:
int someFunctionInAnotherCPPFile(int, char, char*, double);
Do you remember what #include does? Basically, it just grabs whatever file you specify, and sticks it where you put the #include. That's why you put the function prototypes for .cpp files in headers, that way when you include the .h, it tells the compiler how to use the function in the other .cpp.
When you split a class into a header and .cpp, basically you're doing the same thing... except with a class instead of a function.
Then, you have the linker. The linker' job is to grab all the object files that the compiler made, and glue them together in a big .exe file, so that the functions are all together in a big happy family, and the main .cpp (not really a .cpp anymore, it's a .exe now) can use them all, based on the prototypes that you gave the compiler earlier.
Hope this helps! I tried to get rid of all the confusing programming jargon that makes learning hard.