+ 4

Can cout/cin be considered a function?

I've learned that printf on C is a function,so is it the parenthesis,which become something on a function/method?

31st Mar 2021, 5:56 AM
Eduardo Santana
Eduardo Santana - avatar
4 Answers
+ 5
No. cout and cin are not functions and it isn't reasonably close to being one. cout is an instance of a class called ostream. cout is not a function. You could say cout is a variable. cin is similarly a variable and not a function. cin is an instance of istream. How operators such as << work on cout is far more like a function but it still wouldn't be called a function in c++. << is an operator. operator overloads can be thought a lot like non-alphanumeric names for functions. In other words, "<<" is a lot like the name of a method except c++ technically calls things with this type of name an operator. Even though c++'s jargon classifies functions and operators separately, I think it is very reasonable to see them as similar. Operators and functions take parameters, execute algorithms, have return values... In other words, cout << "Hello" is a lot like calling printf("hello") or if you can dream of a method being like: cout.print("Hello"). You can see some operator overloading examples here to learn more: https://en.cppreference.com/w/cpp/language/operators See how similar an operator overload is to a function definition and implementation. Java doesn't support operator overloading probably because the designers saw it as duplicating the role of methods. In Java, an "add" method would be added. In c++, operator+ would be implemented. Java supports many operators but their definitions are not overridable like in c++.
31st Mar 2021, 7:55 AM
Josh Greig
Josh Greig - avatar
+ 2
Eduardo Santana cout - (c)haracter (out)put - is an object defined by the ostream class. cin - (c)haracter (in)put - is an object defined by the istream class. They're declared in the <iostream> header file respectively as: extern ostream cout; and extern istream cin; As an object, cout has corresponding methods that could be used to take args to write to the output stream: int length = 15; cout.write("a char array", length); Alternatively and more commonly used, cout can be used with the insertion (<<) operator followed by an array of chars to be written to the output stream. cout << "a char array"; This is similar to cin with the extraction (>>) operator. You'll want to learn more about operator overloading to understand that the insertion (<<) operator is really a function that overloads the symbol operator using a signature similar to: ostream& operator<<(ostream& out, const T& obj) { // write to stream, then... return out; } Hope this helps your understanding.
4th Apr 2021, 6:11 PM
David Carroll
David Carroll - avatar
0
Thank you very much
8th Apr 2021, 3:35 AM
Eduardo Santana
Eduardo Santana - avatar