Chapter 4 Inheritance - PowerPoint PPT Presentation

1 / 28
About This Presentation
Title:

Chapter 4 Inheritance

Description:

Car is a Vehicle = Car derived from Vehicle. Figure 4.2. IOS. istream. ostream ... remain public in the derived class = models IS-A relationship = mostly used. ... – PowerPoint PPT presentation

Number of Views:24
Avg rating:3.0/5.0
Slides: 29
Provided by: GSU50
Learn more at: http://www.cs.gsu.edu
Category:

less

Transcript and Presenter's Notes

Title: Chapter 4 Inheritance


1
Chapter 4Inheritance
  • Saurav Karmakar
  • Spring 2007

2
Objective
  • IS-A relationships and the allowable changes for
    derived classes
  • The concept of polymorphism
  • Public, private, and protected members and
    inheritance
  • Static vs. dynamic binding
  • Default constructor, copy constructor, and copy
    assignment operator
  • Abstract classes
  • Tricky stuff

3
4.1 What is Inheritance?
  • Another mechanism for code reuse.
  • A process of deriving classes from a base class
    w/o disturbing the implementation of the base
    class.
  • Ex Vehicle is a class
  • Car is a Vehicle gt Car derived from Vehicle

4
Figure 4.2
istringstream
istream
fstream
ifstream
IOS
iostream
stringstream
ostream
ostringstream
ofstream
5
Polymorphism
  • Variables can reference objects of several type.
    When operation are applied to the variable, the
    operation appropriate to the referenced object is
    automatically selected.
  • Derived class is a new class which inherits all
    public protected properties of a base class.
  • Derived class is type-compatible with its base
    class.

6
4.2 Inheritance Basics
  • Public inheritance all public members of the
    base class remain public in the derived class
    gtmodels IS-A relationship gtmostly used.
  • Private inheritance all the public members of
    the base class remain hidden gt models HAS-A
    relationship.

7
General layout of public inheritance
  • class Derived public Base
  • //any member are not listed are inherited
  • //except constructor, destructor, copy,
    constructor and operator
  • public
  • //new constructor and destructor if necessary
  • //modify base member function
  • //new function
  • private
  • //new data member or private function
  • //base members should be disable

8
Inheritance cont. . .
  • Derived class inherits all member functions from
    the base class. It may accept, disallow, or
    redefine them.
  • Derived class can define new functions.

9
Inheritence Ways to Implement
  • Public access to a base class allows access to
    other classes in addition to derived classes.
  • Protected Class member is is private to every
    class except a derived class.

10
Access rules
11
Constructor and Base class initialization
  • If there is no constructor in a derived class, a
    default zero-parameter constructor will be
    generated
  • Base class constructors can be explicitly called
    by name in the initializer list.
  • Default constructor for a derived class Derived()
    Base()

12
Constructor for the new exception class Underflow
  • class Underflow public underflow_error
  • public
  • underflow(const string msg )
  • underflow_error(msg.c_str())

13
Overriding a method(member function)
  • Overriding base class methods Derived class
    methods must have the same signature and
    compatible return types with the base class
    methods.
  • Partial overriding overriding base class methods
    by adding more functionality.

14
Example of partial overriding
  • class Workaholic public Worker
  • public
  • void doWork() //overriding base method
  • WorkerdoWork()// call base method
  • drinkCoffee() // new method
  • WorkerdoWork()// call base method

15
Bindings
  • Static binding the decision about which
    function/type to use to resolve an overload is
    made at compile time.
  • Dynamic binding the decision must be made at run
    time.

16
Examples
  • Worker w
  • Workaholic wh
  • . . .
  • w.doWork()
  • wh.doWork()
  • figure 4.8 static binding
  • Worker wptr
  • cingtgtx
  • if(x ! 0)
  • wptr new Workaholic()
  • else
  • wptr new Worker()
  • . . .
  • //which doWork is used ?
  • wptr -gt doWork()
  • Figure 4.9 dynamic binding

17
Virtual
  • If a function is redefined in a derived class,
    and the overloading is resolved in run time, it
    should be declared virtual in the base class.
  • Example
  • class Worker
  • public
  • virtual void doWork()

18
Virtual Cont
  • Constructors are NEVER virtual
  • Destructors should be virtual for base class gt
    Let the computer know which one to call for
    deallocation.

19
Abstract
  • Abstract method, pure virtual function, has no
    meaningful definition in the base class and is
    defined in derived classes.
  • Abstract class a class containing any abstract
    method gt cant be instantiated and must be
    inherited.
  • Example shape class

20
The abstract base class shape
  • class Shape
  • public
  • Shape( const string shapeName "" )
  • name( shapeName )
  • virtual Shape( )
  • virtual double area( ) const 0
  • //abstract method
  • bool operatorlt ( const Shape rhs ) const
  • return area( ) lt rhs.area( )
  • virtual void print( ostream out cout const
  • out ltlt name ltlt " of area "ltlt area( )
  • private
  • string name
  • //figure 4.13

21
General Rules
  • Nonvirtual functions Overloading is resolved at
    compile time.
  • Virtual functions Overloading is resolved at
    run-time (Base class provide a default
    implementation)
  • Pure virtual functions Overloading is resolved
    at run-time. (Base class provide no default
    implementation)

22
4.4 Tricky C Details
  • Changing the default value in a derived class is
    unsafe because doing so can create an
    inconsistency with virtual functions.

23
Cont
  • When a method is declared in a derived class, it
    hides all methods of the same name in the base
    class gt get away by partial overriding or using
    using directive

24
Illustration of hiding
  • class Base
  • public
  • virtual void bar()
  • class Derived
  • public
  • void bar(int x)
  • Void test( Base arg1, Derived arg2)
  • arg1.bar() // call Basebar() gt OK
  • arg1.bar(4) //call Basebar(int) gt fails for
    not arg2.bar(4) // call Derivedbar(int) gt OK
  • arg2.bar() // fails b/c Derivedbar(int) has
    hidden
  • Basebar()

25
Two ways to solve Hiding
  • Override the zero-parameter bar in Derived
  • void bar() Basebar()
  • Use keyword using in derived class
  • using Basebar

26
4.5 Multiple Inheritance
  • A mechanism for deriving a class from several
    base classes.
  • Ex Student and Employee are derived classes of
    UniversityPerson.
  • class Student virtual public UniversityPerson().
    . .
  • class Employeevirtual public UniversityPerson()
  • class StudentEmployee public Student,
  • public Employee. . .

27
Common errors (page 151)
  • Inheritance is private by default. A common error
    is to omit the keyword public, which is needed to
    specify public inheritance.
  • Objects of abstract classes can NEVER be
    initiated.
  • Constructors can never be declared virtual.
  • More errors defined in page 151..

28
Summary
  • Inheritance a powerful way for code reuse
  • Virtual Dynamic binding, binding at execution
    time.
  • Abstract must be defined in derived classes.
    Abstract classes cant be instantiated.
Write a Comment
User Comments (0)
About PowerShow.com