Not really different from ".cpp", or ".c" files, though they mostly contain class definitions and functions, though that's just some sort of convention: you put the stuff you don't want to see in your main ".cpp" file in headers, so you can easily see what you'r doing.
You can, but you are not forced to use a namespace, it is just a way to avoid writting the namespace for every occurences of functions / classes that are in the namespace, such as this:
Code:
std::cout << "Type c and press enter";
std::cin >> x;
//or you can also have this:
using namespace std;
//...
cout << "Type c and press enter";
cin >> x;