Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   New style headers versus Old style headers (http://www.go4expert.com/forums/style-headers-versus-style-headers-t646/)

goodredhat 19Mar2006 00:23

New style headers versus Old style headers
 
Hi,

Can anyone please tell me why including a new-style header might give completely different results as compared to including the old-style header in the following fairly trivial case ? Using VC++ 6, I write :
Code: CPP

#include <fstream.h>

class CMyLog : public ofstream
{
public :

    CMyLog& operator<<(const char * ptr)
    {
        ofstream::operator<<(ptr);
        return *this;
    }

};

int main()
{
    CMyLog mylog;
    mylog.open("c:\\mylog");
    mylog << "hello world";
    return 0;
}

The mylog file contains the string "hello world". Now just change the first line to use new-style headers, i.e. put in the following

#include <fstream>
using namespace std;

Now the mylog file contains the numeric value of a pointer !

Can anyone please tell me what is going on ? I need urgent help.

Thank you
Manish Jain

coderzone 19Mar2006 08:35

Re: New style headers versus Old style headers
 
Hey it will be interesting to know. I could not get any hint after debugging.

shabbir 19Mar2006 08:37

Re: New style headers versus Old style headers
 
Hey its simple. Just When you are calling the base class implementation with
ofstream::operator<<(ptr);
Actually you are calling the address of the actual string but the old implementation requires no type casting and so it prints the string but the new one prints the address of the ptr into the file.

coderzone 19Mar2006 08:44

Re: New style headers versus Old style headers
 
Yeah that could be the only reason.

goodredhat 19Mar2006 11:08

Re: New style headers versus Old style headers
 
ok, so what be the easiest way to get the new-style header to actually the print the string rather than the address ? Merely casting, you might notice, has no effect here.

shabbir 19Mar2006 13:32

Re: New style headers versus Old style headers
 
Yeah I noticed that. Probably you need to be doing it in a bit different way
Code: CPP

friend ostream & operator << (ostream &out,const char * ptr)
{
    out<<ptr;
    return out;
}



All times are GMT +5.5. The time now is 07:16.