Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
Printing objects in C++

Overloading operators with methods is a great way of providing a shorthand using the operator syntax for common things you want to do with objects. In other words - it's much easier to write:
  c = a + b
than
  c = a.addition(b)
ans it's also much easier for the maintainance programmer later too - a short and sweet "+" is pretty obvious.

In C++ (which I have been teaching for the last couple of days), you can define an operator within a class simply be defining a method with an appropriate name - a predefined name, in fact, such as operator+. There's an example of that from a course I ran earlier this year - [here].

It gets a little trickier when you want to define how an object is to be output when you pass it to an output stream. You've probably seen code like:
  cout << varname << "kgs" << endl
and had it work well for you. And if varname is the name of a standard type such as an integer or a float, it works seemlessly and without the need for much thought. But what if varname is one of your own objects?

Your initial reaction may well be to overload the << operator (actually the left shift operator), but unfortuanatley the object you want to run it on appears to the right of the <<, and so that overriding doesn't work out. What you need to do instead is to provide a method that will work on cout. Here's how ...


cout is a an object of type ostream, so you define an extra function that takes an output stream parameter, and a parameter of whatever object type you have. You call the function operator<< so that it works when you call the << operator. And you have it return the incoming ostream parameter. This latter action is what allows the chaining of a whole series of << operators on a line.

Code:

  ostream &operator<<(ostream &os, Person &p) {
    p.print(&os);
    return os;
    }


You an then simply implement the print method in your class:

  void Person::print(ostream *os) {
    *os << "A Person " << weight << " " << height << endl;
    }


Demonstration source code for those methods include in a class [here]. The header file (including the function template needed) is [here]. And the new logic is called from a sample test program [here].


Illustrations - lunchtime at Well House Manor on the C++ course that was running there yesterday. We have a selection of lunches during the week, tailored to suit the delegates on each particular week. Yesterday was a "healthy option" lunch - very often that's much more popular that a traditional heavy meal which can take up a lot of valuable learning time, and may leave some of us a little too sleepy and mellow for some of the more challenging subjects.
(written 2011-08-13)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
C235 - C and C based languages - I/O in C++
  [1478] Some new C programming examples - files, structs, unions etc - (2007-12-19)
  [1675] Comparing Objects in C++ - (2008-06-13)
  [3124] C++ - putting the language elements together into a program - (2011-01-08)
  [3252] C++ - unknown array size, unknown object type. Help! - (2011-04-17)
  [3807] Reading (and writing) files in C++ - (2012-07-18)
  [3810] Reading files, and using factories to create vectors of objects from the data in C++ - (2012-07-21)
  [4562] Left shift operator on an output stream object - C++ - (2015-10-30)
  [4563] Formatting and outputting your own classes in C++ - (2015-10-30)


Back to
Plenty to do in Melksham
Previous and next
or
Horse's mouth home
Forward to
For programmers who use Internet Explorer as their browser
Some other Articles
The difference between lists and strings - Tcl
Rodwell Trail, Weymouth
What costs 8.20 from Melksham, or 22.30 via Chippenham?
For programmers who use Internet Explorer as their browser
Printing objects in C++
Plenty to do in Melksham
Templates in C++ - defining a family pattern of methods / functions
Eating out in Melksham - where we like for lunch.
Adding the pieces together to make a complete language - C
Do university courses teach the right things for life at work later on?
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3390_Pri ... in-C-.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb