Embed
Email

Inheritance

Document Sample

Categories
Tags
Stats
views:
2
posted:
11/20/2011
language:
English
pages:
11
Inheritance

Classes in object-oriented programming attempt to model real world entities. Just as an entity has

properties and abilities, a class has data members and methods. Both entities in the real world, and

classes in the worlds our programs create have various relationships. These relationships help to

simplify the task of understanding the systems we create and the entities of which they are

constructed.



One such relationship is inheritance. In C++, inheritance defines an "is a" relationship. The derived

class is a type of its base class. For instance, a "cat" class could be derived from an "animal" class. A

cat is an animal. A cat is a type of animal. A derived class inherits both the data members and

methods of its base class. It may also define additional members and methods that support

specialized functionality. All of this is best understood by studying some simple examples.



Let's see how inheritance is implemented in C++. As an example, let's develop classes and code to

model the twenty plus pets that live with me in my small basement apartment.



#include

#include

using namespace std;



class Pet

{

public:

// Constructors, Destructors

Pet(): weight(1), food("Pet Chow") {}

~Pet() {}



//Accessors

void setWeight(int w) {weight = w;}

int getWeight() {return weight;}



void setfood(string f) {food = f;}

string getFood() {return food;}



//General methods

void eat();

void speak();



protected:

int weight;

string food;



};



void Pet::eat()

{

cout

#include

using namespace std;



class Pet

{

public:

// Constructors, Destructors

Pet(): weight(1), food("Pet Chow")

{

cout

#include

using namespace std;



class Pet

{

public:

// Constructors, Destructors

Pet () : weight(1), food("Pet Chow") {}

Pet(int w) : weight(w), food("Pet Chow") {}

Pet(int w, string f) : weight(w), food(f) {}

~Pet() {}



//Accessors

void setWeight(int w) {weight = w;}

int getWeight() {return weight;}



void setfood(string f) {food = f;}

string getFood() {return food;}



//General methods

void eat();

void speak();



protected:

int weight;

string food;



};



void Pet::eat()

{

cout

#include

using namespace std;



class Pet

{

public:

// Constructors, Destructors

Pet () : weight(1), food("Pet Chow") {}

Pet(int w) : weight(w), food("Pet Chow") {}

Pet(int w, string f) : weight(w), food(f) {}

~Pet() {}



//Accessors

void setWeight(int w) {weight = w;}

int getWeight() {return weight;}



void setfood(string f) {food = f;}

string getFood() {return food;}



//General methods

void eat();

void speak();



protected:

int weight;

string food;



};



void Pet::eat()

{

cout << "Eating " << food << endl;

}



void Pet::speak()

{

cout << "Growl" << endl;

}



class Rat: public Pet

{

public:

Rat() {}

Rat(int w) : Pet(w) {}

Rat(int w, string f) : Pet(w,f) {}

~Rat() {}



//Other methods

void sicken() {cout << "Speading Plague" << endl;}

void speak();



};



void Rat::speak()

{

cout << "Rat noise" << endl;

}



class Cat: public Pet

{

public:

Cat() : numberToes(5) {}

Cat(int w) : Pet(w), numberToes(5) {}

Cat(int w, string f) : Pet(w,f), numberToes(5) {}

Cat(int w, string f, int toes) : Pet(w,f), numberToes(toes) {}

~Cat() {}



//Other accessors

void setNumberToes(int toes) {numberToes = toes;}

int getNumberToes() {return numberToes;}



//Other methods

void speak();



private:

int numberToes;

};



void Cat::speak()

{

cout << "Meow" << endl;

}

int main()

{

Pet peter;

Rat ralph;

Cat chris;



peter.speak();

ralph.speak();

chris.speak();



return 0;

l}

Output:









Notice that each subclass implements and used its own speak method. The base class speak method

is overridden. Also, remember that the return type and signature of the subclass method must

match the base class method exactly to override. Another important point is that if the base class

had overloaded a particular method, overriding a single one of the overloads will hide the rest. For

instance, suppose the Pet class had defined several speak methods.

void speak();

void speak(string s);

void speak(string s, int loudness);

If the subclass, Cat, defined only

void speak();

Then speak() would be overridden. speak(string s) and speak(string s, int loudness) would be

hidden. This means that if we had a cat object, fluffy, we could call:

fluffy.speak();

But the following would cause compilation errors.

fluffy.speak("Hello");

fluffy.speak("Hello", 10);



Generally, if you override an overloaded base class method you should either override every one of

the overloads, or carefully consider why you are not.



Two Concluding Notes

Overridden methods should usually be virtual. Although we have instantiated a "Pet" object in the

last example, this is really a type of error. The "Pet" class should be abstract, which means that it

would provide an interface and perhaps a partial implementation, but it would not be instantiated.

You can have a cat, dog or rat but cannot have a "pet".



Related docs
Other docs by Stariya Js @ B...
Lab2_Fishing_lab_pack
Views: 0  |  Downloads: 0
JMK sample legal brief
Views: 1  |  Downloads: 0
DriveQ
Views: 0  |  Downloads: 0
cybersecurity_reform_-_senate_bill_eyes
Views: 0  |  Downloads: 0
Opening and Marketing
Views: 0  |  Downloads: 0
Making_it_Work_notes
Views: 0  |  Downloads: 0
First Announcement 7th ISFS_
Views: 0  |  Downloads: 0
as90173
Views: 0  |  Downloads: 0
VNAfashionshow2010
Views: 0  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!