Inheritance OOP Concept in C++.

Post on 15-Jul-2015

233 views 2 download

Transcript of Inheritance OOP Concept in C++.

PresentationPresentation

OOPOOP Author:Author:

Asad-Ur-RehmanAsad-Ur-Rehman

Inheritance: Extending Inheritance: Extending ClassesClasses

IntroductionIntroduction

Reusability is an important feature of Reusability is an important feature of OOP.OOP.

C++ strongly supports the concept C++ strongly supports the concept of reusability.of reusability.

IntroductionIntroduction

The mechanism of deriving a new The mechanism of deriving a new class from an old one is called class from an old one is called inheritance (or derivation).inheritance (or derivation).

The old class is referred to as base The old class is referred to as base class.( superclass, parent)class.( superclass, parent)

The new class is called the derived The new class is called the derived class or subclass.(child)class or subclass.(child)

continue …

IntroductionIntroduction

The derived class inherits some or all The derived class inherits some or all of the attributes and functions from of the attributes and functions from the base class.the base class.

A class can also inherit properties A class can also inherit properties from more than one class or from from more than one class or from more than one level.more than one level.

continue …

Single InheritanceSingle Inheritance

A derived class with only one base A derived class with only one base class.class.

A

B

Multiple InheritanceMultiple Inheritance

A derived class with several base A derived class with several base classes.classes.

A

C

B

Multilevel InheritanceMultilevel Inheritance

The mechanism of deriving a class The mechanism of deriving a class from another derived class.from another derived class.

A

C

B

Derived ClassesDerived Classes

A derived class can be defined by A derived class can be defined by specifying its relationship with the specifying its relationship with the base class in addition to its own base class in addition to its own details.details.

classclass derived-class-namederived-class-name :: visibility-mode visibility-mode base-class-namebase-class-name{{

………………////………………// members of derived class// members of derived class………………////

};};

Derived ClassesDerived Classes

classclass derived-class-namederived-class-name :: visibility-mode visibility-mode base-class-namebase-class-name

{{………………////………………// members of derived class// members of derived class………………////

};};

The colon indicates that the derived-class-name is derived from the base-class-name

The visibility mode is optional and , if present, may be either private or public.

The default visibility mode is private.

Visibility mode specifies whether the features of the base class are derived privately or publicly.

continue …

Derived ClassesDerived Classes

When a base class is privately derived by a When a base class is privately derived by a derived class, “public members” of the base class derived class, “public members” of the base class become “private members” of the derived class.become “private members” of the derived class.

Therefore the members of the derived class can Therefore the members of the derived class can only access the public members of the base class.only access the public members of the base class.

They are inaccessible to the objects of the They are inaccessible to the objects of the derived class.derived class.

No member of the base class is accessible to the No member of the base class is accessible to the objects of the derived class.objects of the derived class.

continue …

Derived ClassesDerived Classes

When a base class is publicly inherited, When a base class is publicly inherited, ”public members” of the base class ”public members” of the base class become the “public members” of the become the “public members” of the derived class.derived class.

They are accessible to the objects of the They are accessible to the objects of the derived class.derived class.

continue …

Derived ClassesDerived Classes

The private members of the base class are The private members of the base class are not inherited in both the cases not inherited in both the cases (publicly/privately inherited).(publicly/privately inherited).

The private members of a base class will The private members of a base class will never become the members of its derived never become the members of its derived class.class.

continue …

InheritanceInheritance

In inheritance, some of the base class data In inheritance, some of the base class data elements and member functions are inherited into elements and member functions are inherited into the derived class.the derived class.

We can add our own data and member functions We can add our own data and member functions for extending the functionality of the base class.for extending the functionality of the base class.

It is a powerful tool for incremental program It is a powerful tool for incremental program development.development.

Effect of Inheritance on the visibility of MembersEffect of Inheritance on the visibility of Members

Private

Protected

Public

Private

Protected

Public

Private

Protected

Private

Protected

Public Public

Not inheritableNot inheritable

Class B

Class D1 : public B Class D2 : private B

Class X : public D1, protected D2

VisibilityVisibility

Base class Base class visibilityvisibility

Derived class visibilityDerived class visibility

Public Public DerivationDerivation

Private Private DerivationDerivation

Protected Protected DerivationDerivation

Private Private Not Not InheritedInherited

Not Not InheritedInherited

Not Not InheritedInherited

Protected Protected ProtectedProtected PrivatePrivate ProtectedProtected

Public Public PublicPublic PrivatePrivate ProtectedProtected

class Shapeclass Shape

{{

protected:protected:

float width, height;float width, height;

public:public:

void set data (float a, float b)void set data (float a, float b)

{{

width = a; height = b; width = a; height = b;

}}

}; };

class Rectangle: public Shapeclass Rectangle: public Shape

{ {

public:public:

float area () float area ()

{{

return (width * height); return (width * height);

}}

};};

class Triangle: public Shapeclass Triangle: public Shape

{{

public:public:

float area () float area ()

{{

return (width * height) / 2;return (width * height) / 2;

}}

};};

int main ()int main ()

{ {

Rectangle rect; Triangle tri;Rectangle rect; Triangle tri;

rect.set data (5,3); rect.set data (5,3);

tri.set data (2,5);tri.set data (2,5);

cout << rect.area() << endl; cout << rect.area() << endl; cout << tri.area() << endl; cout << tri.area() << endl; return 0; return 0;

}}

Output: 15Output: 15

55

Resolution in InheritanceResolution in Inheritance

class Aclass A{{ public:public:

void display ()void display () { cout << “Class A \n“;}{ cout << “Class A \n“;}};};class B : public Aclass B : public A{{

public:public: void display ()void display ()

{ cout << “Class B \n“;}{ cout << “Class B \n“;}};};

void main( )void main( ){{ B b;B b; b.display( );b.display( ); // in B// in B b.A::display( );b.A::display( ); // in A// in A b.B::display( );b.B::display( ); // in B// in B}}

continue …

Thank YouThank You