0% found this document useful (0 votes)
60 views

CPS 235 Object Oriented Programming Paradigm: Inheritance

This document discusses inheritance in object-oriented programming. It defines inheritance as a relationship between classes where a derived class inherits the behavior and attributes of a base class. This allows code reuse with little or no modification. Inheritance can be continuous, with derived classes acting as base classes for other derived classes. Access control determines whether members of a base class are public, protected, or private in derived classes.

Uploaded by

Naveed Ramzan
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
60 views

CPS 235 Object Oriented Programming Paradigm: Inheritance

This document discusses inheritance in object-oriented programming. It defines inheritance as a relationship between classes where a derived class inherits the behavior and attributes of a base class. This allows code reuse with little or no modification. Inheritance can be continuous, with derived classes acting as base classes for other derived classes. Access control determines whether members of a base class are public, protected, or private in derived classes.

Uploaded by

Naveed Ramzan
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 31

CPS 235 Object

Oriented
Programming
Paradigm

Inheritance

Computer Science
Contents
• Composition (or containership)
– Objects as Members of Classes
• Concept of Inheritance
• Levels of access control

Computer Science CPS235:Inheritance 2


Inheritance
• Inheritance is a relationship between two or
more classes where derived class inherits
behaviour and attributes of pre-existing
(base) classes
• Intended to help reuse of existing code with
little or no modification

Computer Science CPS235:Inheritance 3


Inheritance
• Inheritance can be continuous
– Derived class can inherit from a base class
– The derived class can act as a base class and
another class can inherit from it
– If you change the base class, all derived classes
also change
– Any changes in the derived class do not change the
base class
– All features of the base class are available in the
derived class
• However, the additional features in the derived
class are not available in the base class

Computer Science CPS235:Inheritance 4


Computer Science CPS235:Inheritance 5
Inheritance
Features: a,b
a
b

Class A
Features: a,b,c
Features: a,b,d,e
c d
e

Class B Class C

Features: a,b,d,e,f
f

Class D

6
CPS235:Inheritance
Computer Science
Inheritance and
Encapsulation
• private member
– Is accessible only via the base class
• public member
– Is accessible everywhere (base class, derived
class, othe classes)
• protected member
– Is accessible by the base class and derived classes

Computer Science
Inheritance Concept
class Rectangle{
Polygon private:
int width, length;
public:
void set(int w, int
Rectangle l);
Triangle int area();
};

class Polygon class Triangle{


{ private:
private: int width, length;
int width, length; public:
public: void set(int w, int
void set(int w, int l);
l); int area();
}; };
Computer Science CPS235:Inheritance 8
Inheritance Concept
class Polygon
Polygon {
protected:
int width, length;
public:
Rectangle void set(int w, int
Triangle l);
};
class Rectangle{
protected:
class Rectangle: public
Polygon int width, length;
{ public:
public: void set(int w, int
int area(); l);
}; int area();
Computer Science CPS235:Inheritance 9
Inheritance Concept
class Polygon
Polygon {
protected:
int width, length;
public:
Rectangle void set(int w, int
Triangle l);
};
class Triangle{
protected:
class Triangle :
int width, length;
public Polygon
{ public:
public: void set(int w, int
int area(); l);
}; int area();
Computer Science CPS235:Inheritance 10
Inheritance Concept
class Point
Point x {
y protected:
int x, y;
public:
Circle 3D-Point void set(int a, int
b);
x x
};
y y
r z

class Circle : public Point class 3D-Point: public Point


{ {
private: private:
double r; int z;
}; };

Computer Science CPS235:Inheritance 11


Declaring Inheritance
• Syntax:

class DerivedClassName : access-level BaseClassName

where
– access-level specifies the type of derivation
• private by default, or
• public or
• protected (used very rarely)

Computer Science CPS235:Inheritance 12


Class Derivation
Point class Point{
protected:
int x, y;
3D-Point public:
void set(int a,
int b);
};
Sphere

class 3D-Point : class Sphere : public


public Point{ 3D-Point{
private: double private: double r;
z; … …
… … };
};

Point is the base class of 3D-Point, while 3D-Point is the base


class of Sphere
Computer Science CPS235:Inheritance 13
What to Inherit?
• In principle, every member of a base class is
inherited by a derived class
– just with different access permission

Computer Science CPS235:Inheritance 14


Access Control Over the
Members • Two levels of access control
b a s e c l a s s over
/ s class
u p members
e r c l a s s /
p a r e n t c l a – s class
s definition
– inheritance type
members goes to
derive from

class Point{
protected: int x, y;
public: void set(int
a, int b);
d e r i v e d c l a s };s / s u b c l a s s /
c h i l d c l a s class
s Circle : public
Point{
… …
};
Computer Science CPS235:Inheritance 15
Member Access Control

• There are 3 levels of member (data or methods) access control:


– public: members can be used by itself and the whole world;
any function can access them
– protected: methods (and friends) of itself and any derived
class can use it
– private: members can only be used by its own methods (and
its friends)
• We’ll study friend functions later
• Without inheritance, private and protected have the same
meaning
• The only difference is that methods of a derived class can
access protected members of a base class, but cannot access
private members of a base class

Computer Science CPS235:Inheritance 16


Access Rights of Derived
Classes
Type of Inheritance

private protected public


for Members
Access Control

private private private private


protected private protected protected
public private protected public

• The type of inheritance defines the minimum access level for the
members of derived class that are inherited from the base class
• With public inheritance, the derived class follows the same
access permission as in the base class
• With protected inheritance, only the public members inherited
from the base class can be accessed in the derived class as
protected members
• With private inheritance, none of the members of base class is
accessible by the derived class
Computer Science
Access Rights of Derived
Classes
• Take these classes as examples:
  class B { /*...*/ };
class D_priv : private B { /*...*/ };
class D_prot : protected B { /*...*/ };
class D_publ : public B { /*...*/ };
class UserClass { B b; /*...*/ };
• None of the derived classes can access anything that is private
in B
• In D_priv, the public and protected parts of B are private
• In D_prot, the public and protected parts of B are protected
• In D_publ, the public parts of B are public and the protected
parts of B are protected (D_publ is-a-kind-of-a B)
• class UserClass can access only the public parts of B, which
"seals off" UserClass from B
Computer Science CPS235:Inheritance 18
protected vs. private
So why not always use protected instead of private?

– Because protected means that we have less encapsulation


– All derived classes can access protected data
members of the base class
– Assume that later you decided to change the
implementation of the base class having the protected
data members
– For example, we might want to represent address by a
new class called Address instead of string
– If the address data member is private, we can easily
make this change
– The class documentation does not need to be changed.
– If it is protected, we have to go through all derived
classes and change them
– We also need to update the class documentation.

Computer Science CPS235:Inheritance 19


Class Derivation Example
class daughter :
mother public mother{
private:
double a;
daughter son public:
void foo ( );
};
class mother{
protected: void daughter :: foo ( ){
int x, y; x = y = 20;
public: set(5, 10);
void set(int a, cout<<“value of a
int b); ”<<a<<endl;
private: z = 100; // error, a
int z; private member
}; };

daughter can access 3 of the 4 inherited members


CPS235:Inheritance 20
Computer Science
Class Derivation Example
mother class son : private
mother{
private:
double b;
daughter son public:
void foo ( );
class mother{ }
protected: void son :: foo ( ){
int x, y; x = y = 20;
public: set(5, 10);
void set(int a, cout<<“value of b
int b); ”<<b<<endl;
private: z = 100; // error, not
int z; a public member
} }

son can also access 3 of the 4 inherited members

Computer Science CPS235:Inheritance 21


Class Derivation Example
mother
class daughter :
public mother{
private:
daughter son
double a;
public:
void foo ( );
granddaughter grandson
};
class mother{ class granddaughter :
protected: public daughter{
int x, y; public:
public: void foo ( );
void set(int a, };
int b);
private:
int z;
};
Computer Science CPS235:Inheritance 22
Class Derivation Example
void granddaughter :: foo ( ){
x = y = 20; //OK
set(5, 10); //OK
cout<<“value of a ”<<a<<endl; //error:
private member of daughter
z = 100; // error, a private member of
mother
};

Computer Science CPS235:Inheritance 23


Class Derivation Example
mother
class son : private
mother{
private:
daughter son
double b;
public:
void foo ( );
granddaughter grandson
};
class mother{ class grandson :
protected: public son{
int x, y; public:
public: void foo ( );
void set(int a, };
int b);
private:
int z;
};
Computer Science CPS235:Inheritance 24
Class Derivation Example

void grandson:: foo ( ){


x = y = 20; //ERROR: not accessible
set(5, 10); //ERROR: not accessible

z = 100; // error, a private member of


mother
};

Computer Science CPS235:Inheritance 25


Encapsulation
class Figure
{
protected:
int x, y;
};
class Circle : public Figure
{
public:
int radius;
};
int main()
{
Circle a;
a.x = 0;
a.y = 0;
a.radius = 10;
}

Computer Science
Encapsulation
class Figure Circle::Circle(int x, int
{ y, int radius)
protected: {
int x_, y_; x_ = x;
}; y_ = y;
radius_ = radius;
class Circle : public }
Figure
{ int main()
private: {
int radius_; Circle a(0,0,10);
public: }
Circle(int x, int
y, int radius);
};

Computer Science
Encapsulation
class Figure Circle::Circle(int x, int
{ y, int radius)
private: {
int x_, y_; x_ = x;
}; y_ = y;
radius_ = radius;
class Circle : public }
Figure
{ int main()
private: {
int radius_; Circle a(0,0,10);
public: }
Circle(int x, int
y, int radius);
};

Computer Science
Encapsulation class Circle : public
class Figure
Figure
{ {
private: private:
int x_, y_; int radius_;
public: public:
void SetX(int x); Circle(int x, int
void SetY(int y); y, int radius);
};
void Figure::SetX(int x) };
{ Circle::Circle(int x,
x_ = x; int y, int radius)
} {
void Figure::SetY(int y) SetX(x);
{ SetY(y);
y_ = y; radius_ = radius;
}
}
int main()
{
Circle a(0,0,10);
Computer Science
}
What to Inherit?
• In principle, every member of a base class is
inherited by a derived class
– just with different access permission

• However, there are exceptions for


– Constructor and destructor
– Overloaded Assignment operator
– Friends
Since all these functions are class-specific!

Computer Science CPS235:Inheritance 30


Compulsory Reading
• Robert Lafore
– Chapter 9: Inheritance

Computer Science CPS235:Inheritance 31

You might also like