SlideShare a Scribd company logo
Course:Course:
Object Oriented ProgrammingObject Oriented Programming
4.00 Credit Hours, Spring 2014,4.00 Credit Hours, Spring 2014,
Undergraduate ProgramUndergraduate Program
Instructor: Sabeen JavaidInstructor: Sabeen Javaid
SESSION 1, 2SESSION 1, 2
InheritanceInheritance
InheritanceInheritance
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
2
InheritanceInheritance
The existing class is called the base class,
and the new class is called the derived
class.
Other programming languages, such as Java
and C#, refer to the base class as the
superclass
and the derived class as the subclass. A
derived class represents a more specialized
group of objects.
3
InheritanceInheritance
It is expressed in C++ by the “ : public “
syntax:
◦ class Car : public Vehicle {};
Car “is a” / “is derived from” / “is a
specialized” / “is a subclass of” / “is a
derived class of” Vehicle
Vehicle “is a base class of” / “is a super
class of” Car
4
Inheritance - ExampleInheritance - Example
5
Inheritance - ExampleInheritance - Example
6
Inheritance: is-A RelationshipInheritance: is-A Relationship
Derived class objects can always be treated
like a base class objects
Example: an object of type Student can
always be used like an object of type Person
◦ Especially, we can call all methods of Person on
an object of type Student
7
InheritanceInheritance
• 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
8
9
Base Classes and Derived Classes
10
CommunityMember Class Hierarchy
11
Shape Class Hierarchy
12
Inheritance
a
b
Class A
Features: a,b
c
Class B
Features: a,b,c
d
e
Class C
Features: a,b,d,e
f
Class D
Features: a,b,d,e,f
Inheritance and EncapsulationInheritance and Encapsulation
Three levels of access control
◦ Public: members (data and methods) can be
used by the class and everybody else (other
classes, functions, etc.)
◦ Protected: members can be accessed by the
class (and its friends) and its derived classes
◦ Private: members can be accessed only by the
class (and its friends)
Remark: without inheritance private and
protected are the same
Inheritance and EncapsulationInheritance and Encapsulation
• private member
– Is accessible only via the base class
• public member
– Is accessible everywhere (base class, derived
class, other classes)
• protected member
– Is accessible by the base class and derived classes
15
Inheritance Concept
Rectangle
Triangle
Polygon
class Polygon
{
private:
int width, length;
public:
void set(int w, int
l);
};
class Rectangle{
private:
int width, length;
public:
void set(int w, int
l);
int area();
};
class Triangle{
private:
int width, length;
public:
void set(int w, int
l);
int area();
};
16
Rectangle
Triangle
Polygon
class Polygon
{
protected:
int width, length;
public:
void set(int w, int
l);
};
class Rectangle: public
Polygon
{
public:
int area();
};
class Rectangle{
protected:
int width, length;
public:
void set(int w, int
l);
int area();
Inheritance Concept
17
Rectangle
Triangle
Polygon
class Polygon
{
protected:
int width, length;
public:
void set(int w, int
l);
};
class Triangle :
public Polygon
{
public:
int area();
};
class Triangle{
protected:
int width, length;
public:
void set(int w, int
l);
int area();
Inheritance Concept
18
Inheritance Concept
Point
Circle 3D-Point
class Point
{
protected:
int x, y;
public:
void set(int a, int
b);
};
class Circle : public Point
{
private:
double r;
};
class 3D-Point: public Point
{
private:
int z;
};
x
y
x
y
r
x
y
z
class DerivedClassName : access-level BaseClassName
Declaring InheritanceDeclaring Inheritance
• Syntax:
where
–access-level specifies the type of derivation
• private by default, or
• public or
• protected (used very rarely)
• Any class can serve as a base class
–Thus a derived class can also be a base class
19
20
Class Derivation
Point
3D-Point
class Point{
protected:
int x, y;
public:
void set(int a,
int b);
};
class 3D-Point :
public Point{
private: double
z;
… …
};
class Sphere : public
3D-Point{
private: double r;
… …
};
Sphere
Point is the base class of 3D-Point, while 3D-Point is the base class of
Sphere
What to Inherit?What to Inherit?
In principle, every member of a base class
is inherited by a derived class
◦ just with different access permission
21
22
Access Control Over the Members
• Two levels of access control over
class members
– class definition
– inheritance type
class Point{
protected: int x, y;
public: void set(int
a, int b);
};
class Circle : public
Point{
… …
};
Member Access ControlMember 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
23
24
Access Rights of Derived ClassesAccess Rights of Derived Classes
• Public inheritance preserves the original accessibility
of the base class public and protected members in the
derived class
– (base) public -> (derived) public
– (base) protected -> (derived) protected
– (base) private -> no access
• Protected inheritance causes public members to
become protected (protected members are preserved)
in the derived class
– (base) public -> (derived) protected
– (base) protected -> (derived) protected
– (base) private -> no access
25
Access Rights of Derived ClassesAccess Rights of Derived Classes
• Private inheritance causes all members to become
private in the derived class
– (base) public -> (derived) private
– (base) protected -> (derived) private
– (base) private -> no access
Access Rights of Derived Classes -Access Rights of Derived Classes -
SummarySummary
 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, all members from the base class are inherited
as private. This means private members stay private, and protected and
public members become private.
private protected public
private private private private
protected private protected protected
public private protected public
Type of Inheritance
AccessControl
forMembers
Access Rights of Derived ClassesAccess 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
27
28
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.
29
When to use Private InheritanceWhen to use Private Inheritance
• Overall private and protected inheritance are used very
rarely
• Private and protected inheritance are used to represent
implementation details
• Protected bases are useful in class hierarchies in which
further derivation is needed
• Private bases are useful when defining a class by
restricting the interface to a base so that stronger
guarantees can be provided
30
Class Derivation Example
mother
daughter son
class mother{
protected:
   int x, y;
public:
  void set(int a, 
int b);
private:
   int z;
};
class daughter : 
public mother{
private: 
double a;
public:
void foo ( );
};
void daughter :: foo ( ){
x = y = 20;
set(5, 10); 
cout<<“value of a 
”<<a<<endl; 
z = 100;    // error, a 
private member
};
daughter can access 3 of the 4 inherited members
Class DerivationClass Derivation
mother
daughter son
class mother{
protected:
int x, y;
public:
void set(int a, int b);
private:
int z;
}
class son : protected mother{
private:
double b;
public:
void foo ( );
}
void son :: foo ( ){
x = y = 20;
set(5, 10);
cout<<“value of b ”<<b<<endl;
z = 100; // error, not a public
member
}
son can access only 3 of the 4 inherited member
32
mother
daughter son
granddaughter grandson
Class Derivation Example
class mother{
protected:
   int x, y;
public:
  void set(int a, 
int b);
private:
   int z;
};
class daughter : public mother
{
private: 
double a;
public:
void foo ( );
};
class granddaughter : public daughter
{
public:
void foo ( );
};
33
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
};
Class Derivation Example
34
mother
daughter son
granddaughter grandson
class mother{
protected:
int x, y;
public:
void set(int a,
int b);
private:
int z;
};
class son : protected mother
{
private:
double b;
public:
void foo ( );
};
class grandson : public son
{
public:
void foo ( );
};
Class Derivation Example
35
void grandson:: foo ( ){
x = y = 20;
set(5, 10);
z = 100; // error, a private member of
mother
};
Class Derivation Example
EncapsulationEncapsulation
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;
}
EncapsulationEncapsulation
class Figure
{
protected:
int x_, y_;
};
class Circle : public
Figure
{
private:
int radius_;
public:
Circle(int x,
int y, int radius);
};
Circle::Circle(int x,
int y, int radius)
{
x_ = x;
y_ = y;
radius_ = radius;
}
int main()
{
Circle a(0,0,10);
}
EncapsulationEncapsulation
class Figure
{
private:
int x_, y_;
};
class Circle : public
Figure
{
private:
int radius_;
public:
Circle(int x,
int y, int radius);
};
Circle::Circle(int x,
int y, int radius)
{
x_ = x;
y_ = y;
radius_ = radius;
}
int main()
{
Circle a(0,0,10);
}
EncapsulationEncapsulation
class Figure
{
private:
int x_, y_;
public:
void SetX(int
x);
void SetY(int
y);
};
void Figure::SetX(int
x)
{
x_ = x;
}
void Figure::SetY(int
y)
{
y_ = y;
class Circle : public
Figure
{
private:
int radius_;
public:
Circle(int x, int
y, int radius);
};
Circle::Circle(int x,
int y, int radius)
{
SetX(x);
SetY(y);
radius_ = radius;
}
int main()
{
Circle a(0,0,10);
}
What to Inherit?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!
40
References/ Compulsory ReadingReferences/ Compulsory Reading
C++, How to Program Deitel & Deitel
◦ Chapter 12: OOP : Inheritance
Robert Lafore
◦ Chapter 9: Inheritance
◦ http://www.learncpp.com/cpp-tutorial/115-inheri
41

More Related Content

What's hot (20)

PPTX
Python-Inheritance.pptx
Karudaiyar Ganapathy
 
PPTX
Inheritance in c++
Paumil Patel
 
PPTX
Python-DataAbstarction.pptx
Karudaiyar Ganapathy
 
PPTX
Inheritance in OOPS
Ronak Chhajed
 
PPTX
Abstraction in java.pptx
AsifMulani17
 
PPTX
Inheritance in java
yash jain
 
PPTX
Types of Constructor in C++
Bhavik Vashi
 
PPTX
Tokens expressionsin C++
HalaiHansaika
 
PPT
friend function(c++)
Ritika Sharma
 
PPTX
07. Virtual Functions
Haresh Jaiswal
 
PPTX
Polymorphism In c++
Vishesh Jha
 
PPT
Control structure C++
Anil Kumar
 
PPT
C++: Constructor, Copy Constructor and Assignment operator
Jussi Pohjolainen
 
PPTX
CLASS OBJECT AND INHERITANCE IN PYTHON
Lalitkumar_98
 
PPT
Object-oriented concepts
BG Java EE Course
 
PPTX
Inheritance In C++ (Object Oriented Programming)
Gajendra Singh Thakur
 
PPTX
Constructors and Destructor in C++
International Institute of Information Technology (I²IT)
 
PPTX
virtual function
VENNILAV6
 
PPTX
Instruction codes
pradeepa velmurugan
 
Python-Inheritance.pptx
Karudaiyar Ganapathy
 
Inheritance in c++
Paumil Patel
 
Python-DataAbstarction.pptx
Karudaiyar Ganapathy
 
Inheritance in OOPS
Ronak Chhajed
 
Abstraction in java.pptx
AsifMulani17
 
Inheritance in java
yash jain
 
Types of Constructor in C++
Bhavik Vashi
 
Tokens expressionsin C++
HalaiHansaika
 
friend function(c++)
Ritika Sharma
 
07. Virtual Functions
Haresh Jaiswal
 
Polymorphism In c++
Vishesh Jha
 
Control structure C++
Anil Kumar
 
C++: Constructor, Copy Constructor and Assignment operator
Jussi Pohjolainen
 
CLASS OBJECT AND INHERITANCE IN PYTHON
Lalitkumar_98
 
Object-oriented concepts
BG Java EE Course
 
Inheritance In C++ (Object Oriented Programming)
Gajendra Singh Thakur
 
virtual function
VENNILAV6
 
Instruction codes
pradeepa velmurugan
 

Viewers also liked (20)

PPTX
Inheritance
Sapna Sharma
 
PPT
Oops ppt
abhayjuneja
 
PPT
Object Oriented Programming Concepts
thinkphp
 
PPT
Inheritance and Polymorphism
BG Java EE Course
 
PPT
Java: Inheritance
Tareq Hasan
 
PPTX
Inheritance in JAVA PPT
Pooja Jaiswal
 
PPT
Java Programming - Inheritance
Oum Saokosal
 
PPT
Inheritance
poonam.rwalia
 
PPTX
inheritance c++
Muraleedhar Sundararajan
 
PPT
Inheritance in c++ ppt (Powerpoint) | inheritance in c++ ppt presentation | i...
cprogrammings
 
PPTX
Inheritance in C++
Laxman Puri
 
PPTX
Constructors & destructors
ForwardBlog Enewzletter
 
PPT
Object oriented programming (oop) cs304 power point slides lecture 01
Adil Kakakhel
 
PPT
C++ Inheritance
Jussi Pohjolainen
 
PPT
Chapter 12
Terry Yoast
 
PPTX
Hybrid Inheritance in C++
Abhishek Pratap
 
PPTX
Automation patterns on practice
automated-testing.info
 
PDF
Архитектура автоматизированных тестов
SQALab
 
PPTX
Demultiplexer presentation
Shaikat Saha
 
PPT
INPUT BOX- VBA
ViVek Patel
 
Inheritance
Sapna Sharma
 
Oops ppt
abhayjuneja
 
Object Oriented Programming Concepts
thinkphp
 
Inheritance and Polymorphism
BG Java EE Course
 
Java: Inheritance
Tareq Hasan
 
Inheritance in JAVA PPT
Pooja Jaiswal
 
Java Programming - Inheritance
Oum Saokosal
 
Inheritance
poonam.rwalia
 
inheritance c++
Muraleedhar Sundararajan
 
Inheritance in c++ ppt (Powerpoint) | inheritance in c++ ppt presentation | i...
cprogrammings
 
Inheritance in C++
Laxman Puri
 
Constructors & destructors
ForwardBlog Enewzletter
 
Object oriented programming (oop) cs304 power point slides lecture 01
Adil Kakakhel
 
C++ Inheritance
Jussi Pohjolainen
 
Chapter 12
Terry Yoast
 
Hybrid Inheritance in C++
Abhishek Pratap
 
Automation patterns on practice
automated-testing.info
 
Архитектура автоматизированных тестов
SQALab
 
Demultiplexer presentation
Shaikat Saha
 
INPUT BOX- VBA
ViVek Patel
 
Ad

Similar to Inheritance, Object Oriented Programming (20)

PPT
Inheritance in C++
Shweta Shah
 
PPT
11 Inheritance.ppt
LadallaRajKumar
 
PPT
Inheritance in C++
RAJ KUMAR
 
PDF
lecture 6.pdf
WaqarRaj1
 
PPT
Inheritance
Aadhi Aadhithya
 
PPTX
Inheritance
prashant prath
 
PPT
week14 (1).ppt
amal68766
 
PPT
session 24_Inheritance.ppt
NAVANEETCHATURVEDI2
 
PPT
Overview of Object Oriented Programming using C++
jayanthi699330
 
PPTX
Inheritance
Munsif Ullah
 
PPT
Inheritance OOP Concept in C++.
MASQ Technologies
 
PPTX
simple notes Unit 4-Inheritance (2).pptx
riyanahameed04
 
PPT
inheritance
Amir_Mukhtar
 
PPTX
TYPES OF INHERITANCE CONCEPT IN C++.pptx
SPECIALISESPECIALISE
 
PPTX
Inheritance
sourav verma
 
PPT
10.Inheritance.ppt for oops programinggg
sanketkashyap2023
 
PPTX
Inheritance
Amit Dixit
 
PPTX
Java Inheritance - sub class constructors - Method overriding
NithyaN19
 
PPTX
C++ Inheritance.pptx
XanGwaps
 
PPTX
00ps inheritace using c++
sushamaGavarskar1
 
Inheritance in C++
Shweta Shah
 
11 Inheritance.ppt
LadallaRajKumar
 
Inheritance in C++
RAJ KUMAR
 
lecture 6.pdf
WaqarRaj1
 
Inheritance
Aadhi Aadhithya
 
Inheritance
prashant prath
 
week14 (1).ppt
amal68766
 
session 24_Inheritance.ppt
NAVANEETCHATURVEDI2
 
Overview of Object Oriented Programming using C++
jayanthi699330
 
Inheritance
Munsif Ullah
 
Inheritance OOP Concept in C++.
MASQ Technologies
 
simple notes Unit 4-Inheritance (2).pptx
riyanahameed04
 
inheritance
Amir_Mukhtar
 
TYPES OF INHERITANCE CONCEPT IN C++.pptx
SPECIALISESPECIALISE
 
Inheritance
sourav verma
 
10.Inheritance.ppt for oops programinggg
sanketkashyap2023
 
Inheritance
Amit Dixit
 
Java Inheritance - sub class constructors - Method overriding
NithyaN19
 
C++ Inheritance.pptx
XanGwaps
 
00ps inheritace using c++
sushamaGavarskar1
 
Ad

Recently uploaded (20)

PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PPTX
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PDF
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PDF
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PDF
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PPTX
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pptx
Varsha Nayak
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 

Inheritance, Object Oriented Programming

  • 1. Course:Course: Object Oriented ProgrammingObject Oriented Programming 4.00 Credit Hours, Spring 2014,4.00 Credit Hours, Spring 2014, Undergraduate ProgramUndergraduate Program Instructor: Sabeen JavaidInstructor: Sabeen Javaid SESSION 1, 2SESSION 1, 2 InheritanceInheritance
  • 2. InheritanceInheritance 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 2
  • 3. InheritanceInheritance The existing class is called the base class, and the new class is called the derived class. Other programming languages, such as Java and C#, refer to the base class as the superclass and the derived class as the subclass. A derived class represents a more specialized group of objects. 3
  • 4. InheritanceInheritance It is expressed in C++ by the “ : public “ syntax: ◦ class Car : public Vehicle {}; Car “is a” / “is derived from” / “is a specialized” / “is a subclass of” / “is a derived class of” Vehicle Vehicle “is a base class of” / “is a super class of” Car 4
  • 7. Inheritance: is-A RelationshipInheritance: is-A Relationship Derived class objects can always be treated like a base class objects Example: an object of type Student can always be used like an object of type Person ◦ Especially, we can call all methods of Person on an object of type Student 7
  • 8. InheritanceInheritance • 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 8
  • 9. 9 Base Classes and Derived Classes
  • 12. 12 Inheritance a b Class A Features: a,b c Class B Features: a,b,c d e Class C Features: a,b,d,e f Class D Features: a,b,d,e,f
  • 13. Inheritance and EncapsulationInheritance and Encapsulation Three levels of access control ◦ Public: members (data and methods) can be used by the class and everybody else (other classes, functions, etc.) ◦ Protected: members can be accessed by the class (and its friends) and its derived classes ◦ Private: members can be accessed only by the class (and its friends) Remark: without inheritance private and protected are the same
  • 14. Inheritance and EncapsulationInheritance and Encapsulation • private member – Is accessible only via the base class • public member – Is accessible everywhere (base class, derived class, other classes) • protected member – Is accessible by the base class and derived classes
  • 15. 15 Inheritance Concept Rectangle Triangle Polygon class Polygon { private: int width, length; public: void set(int w, int l); }; class Rectangle{ private: int width, length; public: void set(int w, int l); int area(); }; class Triangle{ private: int width, length; public: void set(int w, int l); int area(); };
  • 16. 16 Rectangle Triangle Polygon class Polygon { protected: int width, length; public: void set(int w, int l); }; class Rectangle: public Polygon { public: int area(); }; class Rectangle{ protected: int width, length; public: void set(int w, int l); int area(); Inheritance Concept
  • 17. 17 Rectangle Triangle Polygon class Polygon { protected: int width, length; public: void set(int w, int l); }; class Triangle : public Polygon { public: int area(); }; class Triangle{ protected: int width, length; public: void set(int w, int l); int area(); Inheritance Concept
  • 18. 18 Inheritance Concept Point Circle 3D-Point class Point { protected: int x, y; public: void set(int a, int b); }; class Circle : public Point { private: double r; }; class 3D-Point: public Point { private: int z; }; x y x y r x y z
  • 19. class DerivedClassName : access-level BaseClassName Declaring InheritanceDeclaring Inheritance • Syntax: where –access-level specifies the type of derivation • private by default, or • public or • protected (used very rarely) • Any class can serve as a base class –Thus a derived class can also be a base class 19
  • 20. 20 Class Derivation Point 3D-Point class Point{ protected: int x, y; public: void set(int a, int b); }; class 3D-Point : public Point{ private: double z; … … }; class Sphere : public 3D-Point{ private: double r; … … }; Sphere Point is the base class of 3D-Point, while 3D-Point is the base class of Sphere
  • 21. What to Inherit?What to Inherit? In principle, every member of a base class is inherited by a derived class ◦ just with different access permission 21
  • 22. 22 Access Control Over the Members • Two levels of access control over class members – class definition – inheritance type class Point{ protected: int x, y; public: void set(int a, int b); }; class Circle : public Point{ … … };
  • 23. Member Access ControlMember 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 23
  • 24. 24 Access Rights of Derived ClassesAccess Rights of Derived Classes • Public inheritance preserves the original accessibility of the base class public and protected members in the derived class – (base) public -> (derived) public – (base) protected -> (derived) protected – (base) private -> no access • Protected inheritance causes public members to become protected (protected members are preserved) in the derived class – (base) public -> (derived) protected – (base) protected -> (derived) protected – (base) private -> no access
  • 25. 25 Access Rights of Derived ClassesAccess Rights of Derived Classes • Private inheritance causes all members to become private in the derived class – (base) public -> (derived) private – (base) protected -> (derived) private – (base) private -> no access
  • 26. Access Rights of Derived Classes -Access Rights of Derived Classes - SummarySummary  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, all members from the base class are inherited as private. This means private members stay private, and protected and public members become private. private protected public private private private private protected private protected protected public private protected public Type of Inheritance AccessControl forMembers
  • 27. Access Rights of Derived ClassesAccess 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 27
  • 28. 28 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.
  • 29. 29 When to use Private InheritanceWhen to use Private Inheritance • Overall private and protected inheritance are used very rarely • Private and protected inheritance are used to represent implementation details • Protected bases are useful in class hierarchies in which further derivation is needed • Private bases are useful when defining a class by restricting the interface to a base so that stronger guarantees can be provided
  • 30. 30 Class Derivation Example mother daughter son class mother{ protected:    int x, y; public:   void set(int a,  int b); private:    int z; }; class daughter :  public mother{ private:  double a; public: void foo ( ); }; void daughter :: foo ( ){ x = y = 20; set(5, 10);  cout<<“value of a  ”<<a<<endl;  z = 100;    // error, a  private member }; daughter can access 3 of the 4 inherited members
  • 31. Class DerivationClass Derivation mother daughter son class mother{ protected: int x, y; public: void set(int a, int b); private: int z; } class son : protected mother{ private: double b; public: void foo ( ); } void son :: foo ( ){ x = y = 20; set(5, 10); cout<<“value of b ”<<b<<endl; z = 100; // error, not a public member } son can access only 3 of the 4 inherited member
  • 32. 32 mother daughter son granddaughter grandson Class Derivation Example class mother{ protected:    int x, y; public:   void set(int a,  int b); private:    int z; }; class daughter : public mother { private:  double a; public: void foo ( ); }; class granddaughter : public daughter { public: void foo ( ); };
  • 34. 34 mother daughter son granddaughter grandson class mother{ protected: int x, y; public: void set(int a, int b); private: int z; }; class son : protected mother { private: double b; public: void foo ( ); }; class grandson : public son { public: void foo ( ); }; Class Derivation Example
  • 35. 35 void grandson:: foo ( ){ x = y = 20; set(5, 10); z = 100; // error, a private member of mother }; Class Derivation Example
  • 36. EncapsulationEncapsulation 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; }
  • 37. EncapsulationEncapsulation class Figure { protected: int x_, y_; }; class Circle : public Figure { private: int radius_; public: Circle(int x, int y, int radius); }; Circle::Circle(int x, int y, int radius) { x_ = x; y_ = y; radius_ = radius; } int main() { Circle a(0,0,10); }
  • 38. EncapsulationEncapsulation class Figure { private: int x_, y_; }; class Circle : public Figure { private: int radius_; public: Circle(int x, int y, int radius); }; Circle::Circle(int x, int y, int radius) { x_ = x; y_ = y; radius_ = radius; } int main() { Circle a(0,0,10); }
  • 39. EncapsulationEncapsulation class Figure { private: int x_, y_; public: void SetX(int x); void SetY(int y); }; void Figure::SetX(int x) { x_ = x; } void Figure::SetY(int y) { y_ = y; class Circle : public Figure { private: int radius_; public: Circle(int x, int y, int radius); }; Circle::Circle(int x, int y, int radius) { SetX(x); SetY(y); radius_ = radius; } int main() { Circle a(0,0,10); }
  • 40. What to Inherit?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! 40
  • 41. References/ Compulsory ReadingReferences/ Compulsory Reading C++, How to Program Deitel & Deitel ◦ Chapter 12: OOP : Inheritance Robert Lafore ◦ Chapter 9: Inheritance ◦ http://www.learncpp.com/cpp-tutorial/115-inheri 41