C++ does resolution by name, not by signature. That means that if two functions/variables/member variables in the same scope have the same name, they can conflict. When you do something like
using namespace std;, you are including the entire
std namespace in your code.
What would happen if you had a templated function called
count in your code that took 3 parameters like
std::count does? You would get a conflict because (after name mangling) both functions would have the same name in the same scope. It is better to just include the parts of the
std namespace that you want to use, so you don't introduce potential errors into your code when you go back to update it.
So, just including statements like
using std::cout; or
using std::ostream; will only include those functions/types/typedefs/&c. in your code.