Presentation is loading. Please wait.

Presentation is loading. Please wait.

This set of notes is adapted from that provided by “Computer Science – A Structured Programming Approach Using C++”, B.A. Forouzan & R.F. Gilberg, Thomson.

Similar presentations


Presentation on theme: "This set of notes is adapted from that provided by “Computer Science – A Structured Programming Approach Using C++”, B.A. Forouzan & R.F. Gilberg, Thomson."— Presentation transcript:

1 This set of notes is adapted from that provided by “Computer Science – A Structured Programming Approach Using C++”, B.A. Forouzan & R.F. Gilberg, Thomson Learning, 2000. Inheritance Chapter 12

2 COMP 103 - Inheritance2 Extending Class from other classes We have seen basic class functions Data hiding (private, protected, public) Friend Functions Overloading (functions, operators) One of the most powerful elements of ADT is the ability to derive classes from other classes This provides the ability to create new classes while retaining the basic characteristics of the original This concept is called: Inheritance

3 COMP 103 - Inheritance3 Figure 12-1 Case Study: Simple Polygons

4 COMP 103 - Inheritance4 Polygon Base Class Figure 12-2

5 COMP 103 - Inheritance5 Figure 12-3, Part I class Polygon { protected: double area; double perimeter; public: Polygon() {}; ~Polygon() {}; void printArea(); void printPeri(); }; // class Polygon Class Definition of Polygon

6 COMP 103 - Inheritance6 Private, Protected and Public Private data and functions Can only be accessed within the class Protected data and functions Can be accessed within the class as well as the derived class from this class Public data and functions Can be accessed by “everyone”.

7 COMP 103 - Inheritance7 Polygon : Function definition void Polygon :: printArea () { cout << "The area of your polygon is " << area << endl; } // Polygons printArea void Polygon :: printPeri () { cout << "The perimeter of your polygon is " << perimeter << endl; } // Polygons printPeri

8 COMP 103 - Inheritance8 Figure 12-3, Part III class Rectangle : public Polygon { private: double sideA, sideB; void calcArea(); void calcPeri(); public: Rectangle(double a, double b); }; Rectangle Object & Polygon

9 COMP 103 - Inheritance9 Derived Class Syntax class derived_class_name : inheritance_type base_class_name Example: class Rectangle : public Polygons class Rectangle : protected Polygons class Rectangle : private Polygons Inheritance rules: All data members of the base object are inherited All function members of the base object are inherited, except: a. Constructors b. Destructors c. friend functions d. Assignment operators

10 COMP 103 - Inheritance10 Inheritance of data and functions class Rectangle : public Polygon { private: double sideA, sideB; void calcArea(); void calcPeri(); protected: double area; double perimeter; public: Rectangle(double a, double b); void printArea(); void printPeri(); }; Inherited Data and Functions

11 COMP 103 - Inheritance11 Rectangle: Constructor and functions Rectangle::Rectangle(double A, double B) { sideA = A; sideB = B; calcPeri( ); // update perimeter field calcArea( ); // update area field } void Rectangle::calcPeri() { perimeter = 2*(sideA + sideB); } void Rectangle::calcArea() { area = sideA * sideB; }

12 COMP 103 - Inheritance12 Main( ) : using Rectangle type void main() { Rectangle rect(3,4); rect.printArea( ); rect.printPeri( ); }

13 COMP 103 - Inheritance13 Figure 12-3, Part II Polygon: Triangle Object class Triangle : public Polygon { private: double sideA, sideB, sideC; void calcArea(); void calcPeri(); public: Triangle(double a, double b, double c ); };

14 COMP 103 - Inheritance14 Inheritance of data and functions class Triangle : public Polygon { private: double sideA, sideB, sideC; void calcArea(); void calcPeri(); protected: double area; double perimeter; public: Triangle(double a, double b, double c); void printArea(); void printPeri(); };

15 COMP 103 - Inheritance15 Triangle: Constructor and Functions Triangle::Triangle(double A,double B,double C) { sideA = A; sideB = B; sideC = C; calcPeri(); // update perimeter field calcArea();// update area field } void Triangle::calcPeri(){ perimeter = sideA + sideB + sideC; } void Triangle::calcArea(){ // Compute the area of a triangle based on // the given side lengths }

16 COMP 103 - Inheritance16 Main( ) : using Triangle type void main() { Triangle tri(3, 4, 5); tri.printArea(); tri.printPeri(); } void main() { Rectangle rect(3, 4); rect.printArea(); rect.printPeri(); } compared with

17 COMP 103 - Inheritance17 Base and Derived Class Access Inheritance TypeBase Access TypeDerived Access Type private inaccessible protectedprivate publicprivate protected privateinaccessible protected publicprotected public privateinaccessible protected public Note: This is confusing for C++ programmers

18 COMP 103 - Inheritance18 Another Example class EmpInfo { private: int ID; protected: int Salary; public: char Name[200]; }; Base Class class EmpInfo : private SecurityEmp {... } ID (private)  inaccessible Salary (protected)  private Name (public)  private class EmpInfo : protected ImportantEmp {... }; ID (private)  inaccessible Salary (protected)  protected Name (public)  protected class EmpInfo : public RegularEmp {... }; ID (private)  inaccessible Salary (protected)  protected Name (public)  public Derived Classes

19 COMP 103 - Inheritance19 Inheritance types (p.601) For all types, Private member data/functions in the base class are inaccessible in the derived class Private (default type) Protected and public data/functions in the base class become private in the derived class Protected Protected and public data/functions in the base class become protected in the derived class Public Protected and public types are preserved!

20 COMP 103 - Inheritance20 Constructors and Derived Types Since Constructors are not inherited, derived types must declare their own constructors, e.g. Polygon case. When a derived class is constructed, it must first execute the constructor for the base class Sometimes we need to pass data to the base class’ constructor (initialize constructor). How?  with base-member-initialization list, e.g. Employee case.

21 COMP 103 - Inheritance21 Example: Employee Class (p.609-611) class Employee { protected: int id; public: Employee(int idIn); }; class SalaryEmp:public Employee { protected: int salary; public: SalaryEmp(int idIn, int sal); }; class HourlyEmp:public Employee { protected: float payrate, hours; public: HourlyEmp(int idIn, float rate); }; Figure 12-6 (p.608) Employee id : integer SalaryEmp salary : integer HourlyEmp payRate : real hours : real

22 COMP 103 - Inheritance22 Constructors Employee::Employee(int idIn) { id = idIn; } SalaryEmp::SalaryEmp(int idIn, int sal) : Employee(idIn) { salary = sal; } HourlyEmp::HourlyEmp(int idIn, float rate) : Employee(idIn) { payRate = rate; hours = 0.0; } pass idIn to Employee(idIn) constructor pass idIn to Employee(idIn) constructor

23 COMP 103 - Inheritance23 Base-Class-Initialization SalaryEmp::SalaryEmp(int idIn, int sal): Employee(idIn) { salary = sal; }  Explicit “base-class-initialization” - Employee(idIn)  Inherited-class constructor SalaryEmp::SalaryEmp(int idIn, int sal) calls the explicit-value base-class constructor Employee(idIn)

24 COMP 103 - Inheritance24 Summary Polygon Case Study Access types Private, Protected, Public (Confusing part of C++) Constructor initialization syntax Employee example


Download ppt "This set of notes is adapted from that provided by “Computer Science – A Structured Programming Approach Using C++”, B.A. Forouzan & R.F. Gilberg, Thomson."

Similar presentations


Ads by Google