100% found this document useful (1 vote)
102 views

Chapter 3 - Inheritance, Polymorphism, Virtual Functions

This chapter discusses inheritance, polymorphism, and virtual functions in C++. Inheritance allows a derived class to inherit attributes and behaviors from a base class. A derived class "is a" type of its base class. Virtual functions allow polymorphic behavior by dynamically binding functions at runtime rather than compile time. Abstract base classes contain pure virtual functions that must be defined in derived classes.

Uploaded by

Jeanpierre Akl
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
102 views

Chapter 3 - Inheritance, Polymorphism, Virtual Functions

This chapter discusses inheritance, polymorphism, and virtual functions in C++. Inheritance allows a derived class to inherit attributes and behaviors from a base class. A derived class "is a" type of its base class. Virtual functions allow polymorphic behavior by dynamically binding functions at runtime rather than compile time. Abstract base classes contain pure virtual functions that must be defined in derived classes.

Uploaded by

Jeanpierre Akl
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 37

Chapter 3

Inheritance, Polymorphism, and Virtual


Functions
What Is Inheritance?

 Provides a way to create a new class from an


existing class
 The new class is a specialized version of the
existing class
Example: Insects
The "is a" Relationship

 Inheritance establishes an "is a" relationship


between classes.
 A poodle is a dog
 A car is a vehicle
 A flower is a plant
 A football player is an athlete
Inheritance – Terminology and
Notation
 Base class (or parent) – inherited from
 Derived class (or child) – inherits from the base class
 Notation:
class Student // base class
{
. . .
};
class UnderGrad : public student
{ // derived class
. . .
};
Back to the ‘is a’ Relationship

 An object of a derived class 'is a(n)' object of the


base class
 Example:
 an UnderGrad is a Student
 a Mammal is an Animal
 A derived object has all of the characteristics of the
base class
What Does a Child Have?

An object of the derived class has:


 all members defined in child class
 all members declared in parent class

An object of the derived class can use:


 all public members defined in child class
 all public members defined in parent class
Protected Members and
Class Access
 protected member access specification:
like private, but accessible by objects of
derived class

 Class access specification: determines how


private, protected, and public
members of base class are inherited by the
derived class
Class Access Specifiers

1) public – object of derived class can be treated


as object of base class (not vice-versa)
2) protected – more restrictive than public, but
allows derived classes to know details of parents
3) private – prevents objects of derived class
from being treated as objects of base class.
Inheritance vs. Access
How inherited base class
members
Base class members appear in derived class
private: x private x is inaccessible
protected: y base class
private: y
public: z private: z

private: x protecte x is inaccessible


protected: y d protected: y
base class
public: z protected: z

private: x public x is inaccessible


protected: y base class protected: y
public: z public: z
More Inheritance vs. Access

class Grade class Test : public Grade


private members: private members:
char letter; int numQuestions;
float score; float pointsEach;
void calcGrade(); int numMissed;
public members: public members:
void setScore(float); Test(int, int);
float getScore();
char getLetter();
private members:
int numQuestions:
When Test class inherits float pointsEach;
from Grade class using int numMissed;
public class access, it public members:
Test(int, int);
looks like this: void setScore(float);
float getScore();
float getLetter();
More Inheritance vs. Access (2)
class Grade class Test : protected Grade
private members: private members:
char letter; int numQuestions;
float score; float pointsEach;
void calcGrade(); int numMissed;
public members: public members:
void setScore(float); Test(int, int);
float getScore();
char getLetter();
private members:
int numQuestions:
When Test class inherits float pointsEach;
from Grade class using int numMissed;
protected class access, it public members:
Test(int, int);
looks like this: protected members:
void setScore(float);
float getScore();
float getLetter();
More Inheritance vs. Access (3)

class Grade class Test : private Grade


private members: private members:
char letter; int numQuestions;
float score; float pointsEach;
void calcGrade(); int numMissed;
public members: public members:
void setScore(float); Test(int, int);
float getScore();
char getLetter();
private members:
int numQuestions:
When Test class inherits float pointsEach;
from Grade class using int numMissed;
private class access, it void setScore(float);
float getScore();
looks like this: float getLetter();
public members:
Test(int, int);
Constructors and Destructors
in Base and Derived Classes
 Derived classes can have their own
constructors and destructors
 When an object of a derived class is created,
the base class’s constructor is executed first,
followed by the derived class’s constructor
 When an object of a derived class is
destroyed, its destructor is called first, then
that of the base class
Constructors and Destructors
in Base and Derived Classes
Program 5-14 (Continued)
Passing Arguments to
Base Class Constructor
 Allows selection between multiple base class
constructors
 Specify arguments to base constructor on
derived constructor heading:
Square::Square(int side) :
Rectangle(side, side)
 Can also be done with inline constructors
 Must be done if base class has no default
constructor
Passing Arguments to
Base Class Constructor

derived class constructor base class constructor

Square::Square(int side):Rectangle(side,side)

derived constructor base constructor


parameter parameters
Redefining Base Class
Functions
 Redefining a function: function in a derived
class that has the same name and parameter
list as a function in the base class

 Typically used to replace a function in base


class with different actions in derived class
Redefining Base Class
Functions
 Not the same as overloading – with
overloading, parameter lists must be different

 Objects of base class use base class version


of function; objects of derived class use
derived class version of function
Base Class

Note setScore function

15-22
Derived Class

Redefined setScore function

15-23
From Program 15-7
Problem with Redefining

 Consider this situation:


 Class BaseClass defines functions x() and y(). x()
calls y().
 Class DerivedClass inherits from BaseClass and
redefines function y().
 An object D of class DerivedClass is created and
function x() is called.
 When x() is called, which y() is used, the one defined in
BaseClass or the the redefined one in DerivedClass?
Problem with Redefining
BaseClass

void X(); Object D invokes function X()


void Y(); In BaseClass. Function X()
invokes function Y() in BaseClass, not
DerivedClass function Y() in DerivedClass,
because function calls are bound at
compile time.
This is static binding.

void Y();

DerivedClass D;
D.X();
Polymorphism and
Virtual Member Functions
 Virtual member function: function in base class that
expects to be redefined in derived class
 Function defined with key word virtual:
virtual void Y() {...}
 Supports dynamic binding: functions bound at run
time to function that they call
 Without virtual member functions, C++ uses static
(compile time) binding
Virtual Functions

 A virtual function is dynamically bound to


calls at runtime.

 At runtime, C++ determines the type of object


making the call, and binds the function to the
appropriate version of the function.
Virtual Functions

 To make a function virtual, place the virtual


key word before the return type in the base
class's declaration:

virtual char getLetterGrade() const;


 The compiler will not bind the function to
calls. Instead, the program will bind them at
runtime.
Polymorphism Requires
References or Pointers
 Polymorphic behavior is only possible when
an object is referenced by a reference
variable or a pointer.
Base Class Pointers

 Can define a pointer to a base class object


 Can assign it the address of a derived class
object
Base Class Pointers

 Base class pointers and references only know about


members of the base class
 So, you can’t use a base class pointer to call a derived
class function

 Redefined functions in derived class will be ignored


unless base class declares the function virtual
Abstract Base Classes and
Pure Virtual Functions
 Pure virtual function: a virtual member function that
must be overridden in a derived class that has
objects
 Abstract base class contains at least one pure
virtual function:
virtual void Y() = 0;
 The = 0 indicates a pure virtual function
 Must have no function definition in the base class
Abstract Base Classes and
Pure Virtual Functions

 Abstract base class: class that can have no


objects. Serves as a basis for derived
classes that may/will have objects
 A class becomes an abstract base class
when one or more of its member functions is
a pure virtual function
Multiple Inheritance
 A derived class can have more than one base class
 Each base class can have its own access
specification in derived class's definition:
class cube : public square,
public rectSolid;

class class
square rectSolid

class
cube
Multiple Inheritance

 Arguments can be passed to both base


classes' constructors:
cube::cube(int side) : square(side),
rectSolid(side, side, side);
 Base class constructors are called in order
given in class declaration, not in order used
in class constructor
Multiple Inheritance

 Problem: what if base classes have member


variables/functions with the same name?
 Solutions:
 Derived class redefines the multiply-defined function
 Derived class invokes member function in a particular base
class using scope resolution operator ::
 Compiler errors occur if derived class uses base
class function without one of these solutions

You might also like