Re: a stream manipulator
On Thu, 29 Jun 2006 16:31:03 +0200, "Alf P. Steinbach"
<alfps@start.no> wrote:
* ax:
my book says it is ok define
ostream& operator<<(ostream& (*p)(ostream ))
{ return (*p)( *this); }
Which book is that?
This could be a member function.
if i have the
class X{
public:
X(){}
~X(){}
friend int f(X, int);
friend ostream& operator<<(ostream& , X& );
X& operator=(X&);
X& g(int, X&);
};
"member functions" for class X are all functions for the class X?
(X() ~X(), f, <<, =, g)
or they are there only "=", "g"?
ostream& endl(ostream& o)
{o.put('\n'); o.flush();}
but seems compiler says it is not correct because "<<" needs 2
arguments, so i wrote
ostream& operator<<(ostream& ostr, ostream& (*p)(ostream& ))
{ return (*p)( ostr ); }
ostream& endl(ostream& o)
{o.put('\n'); o.flush();}
and the compiler compile and run it when i write
cout << "jfjfjfj" << endl;
But i have some doubit. is the last right?
No. You need to return a reference to the 'o' argument. Also, it's not
a good idea to use the same names as things in the std namespace.
return o;
ok i forgot to write it in the last endl (i copied the one of the book
and not the one in my code)
then i have not good understanding for objects ostream "ios" flags
"internal, uppercase". What is their purpose?
I don't think the first is standard, although it could be. The second
sounds like a standard one. Look them up in your /documentation/.
for istream "ios" what is the pourpose of
"left, right, internal, showbase, showpoint, uppercase, showpos,
scientific, fixed, "?
Whether this is HOMEWORK or not, look them up in your /documentation/.
what meaning is to define a "right" indentation for an input stream?
the same for showbase
is it the meaning: prog tell me it wants a hex value and i write 9 and
it doesn't accept it because the input stream has in its flag
"showbase" on?