When you use inheritance, you create a tree of object types, where one type is based on another. For example, you define a base class of "transport" and then you extend that to define similar classes with extras called "bus" and "train". That's a very different matter to using a class connected in another way - for example if we wanted to have a class for all the various pieces of transport used on between two towns. For that, we'll use an associated class, which is simply a class that's used in conjunction with (and perhaps depends on) the other classes.
Here's some code where I've set up an object of type "flow" to contain a whole collection of objects of type "train" or "bus". Trains and buses are "transports" - so that's inheritance in use, but flow is just an associated class:
Flow *chippenham_trowbridge = new Flow(6);
chippenham_trowbridge->add(new Train(2,73));
chippenham_trowbridge->add(new Train(1,69));
chippenham_trowbridge->add(new Bus(2,61));
chippenham_trowbridge->add(new Bus(1,81));
I've then made use of the flow object:
int seatsonflow = chippenham_trowbridge->getseats();
int vehiclesonflow = chippenham_trowbridge->getunits();
int driversonflow = chippenham_trowbridge->getdrivers();
cout << "Seats on flow: " << seatsonflow << endl;
cout << "Vehicles on flow: " << vehiclesonflow << endl;
cout << "Drivers on flow: " << driversonflow << endl;
The code to add a Transport item onto the Flow collection is like this:
void Flow::add(Transport * item) {
route[nroutes++] = item;
}
And here is one of the methods on the Flow object which calls methods on its associative objects:
int Flow::getunits() {
int so_far = 0;
for (int k=0; k<nroutes; k++) {
so_far += route[k]->getveh();
}
return so_far;
}
Complete example from today's C++ course:
[here].
(written 2013-01-18, updated 2013-01-19)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Q909 - Object Orientation and General technical topics - Object Orientation: Composite Objects [477] Class, static and unbound variables - (2005-10-25)
[592] NOT Gone phishing - (2006-02-05)
[1345] Perl and Shell coding standards / costs of an IT project - (2007-09-11)
[1348] Screw it or Glue it? Access to Object variables - a warning - (2007-09-12)
[2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2865] Relationships between Java classes - inheritance, packaging and others - (2010-07-10)
[2922] Getting the OO design write - with PHP a example - (2010-08-14)
[3142] Private and Public - and things between - (2011-01-22)
[3152] Jargon busting - (2011-01-30)
[3251] C++ - objects that are based on other objects, saving coding and adding robustness - (2011-04-17)
[3609] How do classes relate to each other? Associated Classes - (2012-02-12)
[4377] Designing a base class and subclasses, and their extension, in C++ - (2015-01-01)
[4394] Philosophy behind object design - and how I applied in to a Java example - (2015-01-14)
[4450] Deciding whether to use parameters, conditional statements or subclasses - (2015-03-05)
C233 - C and C based languages - OO in C++ - beyond the basics [798] References and Pointers in C++ - (2006-07-10)
[801] Simple polymorphism example - C++ - (2006-07-14)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
[925] C++ - just beyond the basics. More you can do - (2006-11-14)
[1217] What are factory and singleton classes? - (2007-06-04)
[1572] C - structs and unions, C++ classes and polymorphism - (2008-03-13)
[1674] What a lot of files! (C++ / Polymorphism demo) - (2008-06-12)
[1819] Calling base class constructors - (2008-10-03)
[2577] Complete teaching example - C++, inheritance, polymorphism - (2010-01-15)
[2845] Objects and Inheritance in C++ - an easy start - (2010-07-01)
[3056] C++ - a complete example with polymorphism, and how to split it into project files - (2010-11-16)
[3123] C++ objects - some short, single file demonstrations - (2011-01-07)
[3124] C++ - putting the language elements together into a program - (2011-01-08)
[3244] C and C++ - preprocess, compile, load, run - what each step is for - (2011-04-12)
[3508] Destructor methods in C++ - a primer - (2011-11-05)
[3811] Associated Classes - using objects of one class within another - (2012-07-21)
[4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
[4375] Final examples for 2014 - and a look at our 2015 training course options - (2014-12-31)
[4559] When do I use the this keyword in C++? - (2015-10-29)
[4560] Variables, Pointers and References - C and C++ - (2015-10-29)
Some other Articles
Upcoming courses at Well House Manor - Ruby, Python, PerlUsing a vector within an object - C++ Melksham - a town of some remarkable peopleWell House Manor in the snowExtended and Associated objects - what is the difference - C++ exampleTeaching OO - how to avoid lots of window switching early onA variety of continental breakfastsEasy pricing, quick and easy checkoutBeing an amateur hotel inspector helps me run a professional hotelTV show appearance - how does it effect your web site?