Solved

C++: << Operator does not work as expected

Posted on 2010-11-16
7
406 Views
Last Modified: 2012-05-10
I am trying to overload the << operator.

I have a custom class called person.

I added this to person.h:

public:
.....
....
ostream &person::operator<<(ostream &stream);

I added this to person.cpp
....
....
ostream &person::operator<<(ostream &stream) {
            stream << this->getAge()  << " ";
            return stream;
      }

In the main function, I did the following.
person P4 = person("C", "C", 23); //first name, last name and age
cout << &P4 << " ";

The code compiles fine but when I run the code, I see this output:
0012FDFC

I am expecting output:
23

I am using Visual Studio 2008.

Not sure what am I doing wrong. Please help. Thanks in advance.
0
Comment
Question by:shekhar_shashi
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
7 Comments
 
LVL 44

Assisted Solution

by:AndyAinscow
AndyAinscow earned 100 total points
ID: 34149200
&P4 means the memory adress of P4

does this do what you expect
cout << P4 << " ";
0
 
LVL 3

Author Comment

by:shekhar_shashi
ID: 34149276
If I change the code this way, I get this compilation error:

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'person' (or there is no acceptable conversion)      
0
 
LVL 86

Accepted Solution

by:
jkr earned 400 total points
ID: 34149422
That's what evilrix' point was in your last question - you better make that
class person; // foward declaration

ostream& operator<< ( ostream& os, const student& p) ;

class person
{
  friend ostream& operator<< ( ostream& os, const person& p) ;

  // ...

};

ostream& operator<< ( ostream& os, const person& p)
{
  os << p.getAge();

  return 0s;
}

Open in new window

0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 3

Author Comment

by:shekhar_shashi
ID: 34149717
Pardon my C++ ignorance here.

I am getting about 9 compilation errors after making these code changes.

Instead of posting all the compilation errors, let me ask a few questions:

Question 1:
Where should the forward declaration go?

class person; // foward declaration

ostream& operator<< ( ostream& os, const student& p) ;

Question 2: I am guessing this code needs to be placed in the header file.

class person
{
  friend ostream& operator<< ( ostream& os, const person& p) ;

  // ...

};

Am I correct?

Question 3:

I am guessing this code will be placed in the person.cpp file.

ostream& operator<< ( ostream& os, const person& p)
{
  os << p.getAge();

  return 0s;
}
 
Am I correct?

Thanks.


0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 400 total points
ID: 34149837
1. Just above the operator's declaration

2. Actually, you just need to add
  friend ostream& operator<< ( ostream& os, const person& p) ;

to the declaration of the 'person' class.

3. You're absolutely correct ;o)
0
 
LVL 3

Author Comment

by:shekhar_shashi
ID: 34149879
Your answer was spot on.  Thanks a bunch for helping out this C++ newbie.
0
 
LVL 3

Author Closing Comment

by:shekhar_shashi
ID: 34149904
Thanks
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The following diagram presents a diamond class hierarchy: As depicted, diamond inheritance denotes when two classes (e.g., CDerived1 and CDerived2), separately extending a common base class (e.g., CBase), are sub classed simultaneously by a fourt…
In Easy String Encryption Using CryptoAPI in C++ (http://www.experts-exchange.com/viewArticle.jsp?aid=1193) I described how to encrypt text and recommended that the encrypted text be stored as a series of hexadecimal digits -- because cyphertext may…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

724 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question