Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Python and Tcl - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Lua, etc
 
C++ - objects that are based on other objects, saving coding and adding robustness

In a previous article ([here]), I talked about how we introduce the basic concepts of classes, methods and objects on our C++ courses. I'm now going to give you some links to the next series of example which I wrote during that same course.

Train to MelkshamHaving covered object basics, we moved on to look at related types of objects. I had taken trains as my first example, and I wanted to move on to cover public transport in general. There are more similarities than there are differences between the use of a bus and a train (and a ferry!) and so it would be a great shame to duplicate program code. The duplication would be quick and easy enough, but then any future updates / corrections / enhancements would have to be made to to each copy, and that's going to get ver inefficient. So we create what's known as a "base class" which includes all the common stuff, and then a series of "subclasses" each of which contains the the extras or the stuff that varies.

How does this work at run time? When you call a method on an object, it looks within the functions defined for that object type. If the method isn't there, it looks in the parent class (i.e. the common base), an dif it's not there it looks in the parent's parent, and so on. Very neat, great to write, but you do need to document what you're doing fairly carefully so that you can find out where a particular functionallity has come from later on!.

There's a first example from the course [here]; my base class is called "Ptrans" for Public Transport, and I have got two subclasses (also know as extended classes) - one each for a Bus and a Train. A lot of the code can be common to Ptrans, but when it comes to working out the number of drivers required for a certain number of vehicles, it's one per vehicle on the road, but one per whole series of vehicles on the railway. A setup like this, where the code is selected as the program runs depending on the type of object it's being run on, is called polymorphism. You won't find the word declared in the source code - it's a useful side effect of the design method used.


Local bus in MelkshamWhere we want to hold a whole array of objects of similar type (i.e. based on the same base class), we can do so. And we've an example of that in source code [here]. But there are a couple of extras you need in C++.

1. If you're going to set up an array containing different object types, you need to declare the array to be of the type of a common parent. Thus - an array of pointers to Ptrans in our example

2. If you're calling any methods which ONLY exist in the subclasses (such as getting the number of drivers, where there is no common code but you'll have an algorithm for EVERY vehicle type), you need to declare virtual methods in your base class. You're turning it into what's known as an abstract class (i.e. you can't have any pieces of Public Transport which are NOT defined by a subclass)

You can have methods that work on an object (they're know as dynamic or object methods), and you can also have methods that work on the class as a whole (they're known as static method or class methods) - but what if you want to write a method which works on two objects - for example to compare them. "Which has the higher capacity?". That's something that I added to the third example in this series - source code [here].

The 'trick' - if you would like to call it a trick - is to pass in one object as a parameter to an object method - thus:
  options[2]->compare(options[0])
to compare two specific members of an array of Ptrans object known as options. By careful codeing, you can use a method in the base class to compare two different objects based on a polymorphic criterion of your choice - our example returns the object with the higher passenger capacity in this example.

You may at first wonder why I used the word that for my parameter ... I did that simpley because the object on which the call is based is called this (a reserved word in C++), and it adds a neat understandability and symmetry to have the second thing that's being compared known as that.

The example goes on to include a static method (I called it mostyn for a reason that's already lost in time!) which looks for the highest capacity in a whole array of objects. Mostyn calls compare ... which calld getcapacity for each individual object. It's a neat tree which, once again, show how code is being shared and should only be written once. Algorithms can easily be changed later, at a single stroke, and retesting is easy. You'll score high in the coding stakes, and high in consistency and reliability too using this approach.


P.S. ... extra example, showing how to write a destructor in C++ - [here]. If you want to add some extra activities when you've finished with an object (such as flushing changes made to a copy of the data help in memory back to a database) you may do so via a destructor. Destructors are odd in that you don't necessarily have to call them directly - they may be called and run automatically when a variable goes out of scope.
(written 2011-04-17)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
C233 - C and C based languages - OO in C++ - beyond the basics
  [4560] Variables, Pointers and References - C and C++ - (2015-10-29)
  [4559] When do I use the this keyword in C++? - (2015-10-29)
  [4377] Designing a base class and subclasses, and their extension, in C++ - (2015-01-01)
  [4375] Final examples for 2014 - and a look at our 2015 training course options - (2014-12-31)
  [4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
  [3979] Extended and Associated objects - what is the difference - C++ example - (2013-01-18)
  [3811] Associated Classes - using objects of one class within another - (2012-07-21)
  [3508] Destructor methods in C++ - a primer - (2011-11-05)
  [3244] C and C++ - preprocess, compile, load, run - what each step is for - (2011-04-12)
  [3142] Private and Public - and things between - (2011-01-22)
  [3124] C++ - putting the language elements together into a program - (2011-01-08)
  [3123] C++ objects - some short, single file demonstrations - (2011-01-07)
  [3056] C++ - a complete example with polymorphism, and how to split it into project files - (2010-11-16)
  [2845] Objects and Inheritance in C++ - an easy start - (2010-07-01)
  [2577] Complete teaching example - C++, inheritance, polymorphism - (2010-01-15)
  [1819] Calling base class constructors - (2008-10-03)
  [1674] What a lot of files! (C++ / Polymorphism demo) - (2008-06-12)
  [1572] C - structs and unions, C++ classes and polymorphism - (2008-03-13)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [925] C++ - just beyond the basics. More you can do - (2006-11-14)
  [831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
  [801] Simple polymorphism example - C++ - (2006-07-14)
  [798] References and Pointers in C++ - (2006-07-10)

Q909 - Object Orientation and General technical topics - Object Orientation: Composite Objects
  [4450] Deciding whether to use parameters, conditional statements or subclasses - (2015-03-05)
  [4394] Philosophy behind object design - and how I applied in to a Java example - (2015-01-14)
  [3609] How do classes relate to each other? Associated Classes - (2012-02-12)
  [3152] Jargon busting - (2011-01-30)
  [2922] Getting the OO design write - with PHP a example - (2010-08-14)
  [2865] Relationships between Java classes - inheritance, packaging and others - (2010-07-10)
  [2641] Object Oriented Programming in PHP - (2010-02-19)
  [2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
  [1348] Screw it or Glue it? Access to Object variables - a warning - (2007-09-12)
  [1345] Perl and Shell coding standards / costs of an IT project - (2007-09-11)
  [592] NOT Gone phishing - (2006-02-05)
  [477] Class, static and unbound variables - (2005-10-25)


Back to
C++ - how we teach the language and the concepts behind the language
Previous and next
or
Horse's mouth home
Forward to
C++ - unknown array size, unknown object type. Help!
Some other Articles
Process every member of an array, and sort an array - Ruby
Multiple inputs, multiple out, ruby functions
Is this number between? Does this list include? - Ruby
C++ - unknown array size, unknown object type. Help!
C++ - objects that are based on other objects, saving coding and adding robustness
C++ - how we teach the language and the concepts behind the language
Events - Spring and Early Summer 2011 in Melksham
What have these pictures in common?
Light and dark at Green Park
Melksham - the way forward. 26th April, Well House Manor
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., 2019: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
PH: 01225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3251_C-o ... tness.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat