class inheritance week 7 chapter 20 cs 116 - senem kumova metin1

15
CLASS INHERITANCE WEEK 7 Chapter 20 CS 116 - SENEM KUMOVA METIN 1

Upload: gabriella-lloyd

Post on 01-Jan-2016

223 views

Category:

Documents


0 download

TRANSCRIPT

CLASS INHERITANCE

WEEK 7Chapter 20

CS 116 - SENEM KUMOVA METIN

1

WHAT is INHERITANCE ??

• Building a new class by deriving the new class from an existing class

– Software reusability

– Create new class from existing class• Absorb existing class’s data and behaviors• Enhance with new capabilities

– Derived class inherits from base class• Derived class

– More specialized group of objects– Behaviors inherited from base class

» Can customize– Additional behaviors

CS 116 - SENEM KUMOVA METIN

2

INHERITANCE EXAMPLES

Base class Derived classes

Student GraduateStudent UndergraduateStudent

Shape

Circle Triangle Rectangle

Loan

CarLoan HomeImprovementLoan MortgageLoan

Employee FacultyMember StaffMember

Account CheckingAccount SavingsAccount

CS 116 - SENEM KUMOVA

METIN3

INHERITANCE EXAMPLES• A “GraduadeStudent” is a “Student”• An “UndergraduateStudent” is also a “Student”

• “GraduadeStudent” is a specialization of “Student”

OROR• “Student” is a generalization of

“GraduadeStudent”Base class Derived classes

StudentStudent GraduateStudentGraduateStudent

UndergraduateStudentUndergraduateStudent

CS 116 - SENEM KUMOVA METIN

4

BASIC CONCEPTS & SYNTAX 1• How to derive a class from an existing one??

/* BASE CLASS */class BaseClass {

// data members and methods of class BC… };

/* DERIVED CLASS */class DerivedClass : public BaseClass {

// data members and methods of class DC … };

• DerivedClass is derived from BaseClass publiclyCS 116 - SENEM KUMOVA METIN

5

BASIC CONCEPTS & SYNTAX 2class BC { /* … */ };

class DC1 : public BC { /* data members and methods of class DC1 */ };

class DC2 : BC { /* data members and methods of class DC2 */ };

• The keyword “public” in the declaration of DC1 shows that derivation is public…

• Public members of BC is public to DC1 (all public members are public, protected members are protected and private members are invisible!!)

• If no keyword (public, private or protected) is used as in DC1, then inheritance is “private”

CS 116 - SENEM KUMOVA METIN

6

BASIC CONCEPTS & SYNTAX 3class Circle { public:

Circle(); void setRadius(double r); double getRadius(); double Diameter(); double Circumference();

private:double radius;

};

class Cylinder : public Circle{public:

double Volume();void setHeigth(double

h);private:

double height;}; CS 116 - SENEM KUMOVA

METIN7

Radius

setRadius()

getRadius()

Diameter()

Circumference()

Circle

height

Volume()setHeigth()Cylind

erDerived class

Base class

BASIC CONCEPTS & SYNTAX 4

class Circle { public:

Circle(); void setRadius(double r); double getRadius(); double Diameter(); double Circumference();

private:double radius;

};

class Cylinder : public Circle{public:

double Volume();void setHeigth(double h);

private:double height;

};

MEMBERS FOR CYLINDER

MemberAccess

Status in Cylinder

How Obtained

double radius

Not accessible

from Circle

setRadius() publicfrom Circle

getRadius() public from CircleDiameter() public from Circle

Circumference()

public from Circle

double height

privateits own member

setHeigth() publicits own member

Volume() publicits own member

CS 116 - SENEM KUMOVA METIN

8

Private members in Inheritance#include <iostream>using namespace std;

class Circle { public:

void setRadius(double r) { radius =r; } double getRadius() { return radius;} double Diameter() { return radius*2;} double Circumference() { return radius*2*3.14; }double Area() {return 3.14*radius*radius; }

private:double radius;

};

class Cylinder : public Circle{public:

double Volume() { return 3.14*getRadius()*getRadius()*height; }// CAN NOT ACCESS TO radius USE getRadius()void setHeight(double h) { height =h; }

private:double height;

}; CS 116 - SENEM KUMOVA METIN

9

void main(){ Cylinder x;

x.setRadius(5); x.setHeight(2);cout << x.getRadius()<<endl;cout <<x.Volume();cout<<x.Area();

}

radius

height

CircleCircle

CylinderCylinder

Adjusting Accessclass Circle { public:

void setRadius(double r){ radius =r; } double getRadius() { return radius;} double Diameter() { return radius*2;} double Circumference() { return radius*2*3.14; }

private:double radius;

};

class Cylinder : public Circle{public:

double Volume() { return 3.14*getRadius()*getRadius()*height; }//{ return 3.14*Diameter()*Diameter()/4*height; }// pi*r^2*h

void setHeight(double h) { height =h; }

private:double height; using Cylinder : : Diameter;};

CS 116 - SENEM KUMOVA METIN

10

void main(){ Cylinder x;

x.setRadius(5); x.setHeight(2);cout << x.getRadius()<<endl;cout <<x.Diameter(); //???

}

A public member in a base class that would normally be inherited as public in a derived class can be made private or protected

Name Hidingclass Circle {

public: void setRadius(double r){ radius =r; } double getRad(){ return radius; } double Area() { return radius*radius*3.14; }

private:double radius;

};

class Cylinder : public Circle{public:

double Volume() { return 3.14*getRad()*getRad()*height; }

double Area() { return 2*3.14*getRad()*height+2*3.14*getRad()*getRad() ; }

// 2.pi.r.h+ 2*pi*r*rvoid setHeight(double h) { height =h; }

private:double height;

};CS 116 - SENEM KUMOVA

METIN11

void main(){ Cylinder x;

x.setRadius(5); x.setHeight(2);cout << x.Area()<<endl;

cout<<x.Circle::Area()cout <<x.Volume();

}If a derived class has a member with the same name as a member in base class, local member hides the inherited member

Multiple Inheritance 1/2• Classes A, B, and C are direct base classes for

the derived class X

class A { /* ... */ }; class B { /* ... */ }; class C { /* ... */ }; class X : public A, public B, public C { /* ... */ };

Multiple Inheritance: Indirect Inheritance 2/2

• A derived class can be a base class for another class………………………

• A “Coupe” is a “Car”

• A “Car” is a “Vehicle”………………………

• A “Coupe” is a “Vehicle”

Base class Derived classes

Vehicle

CarTruckBus…

Base class Derived classes

Car Coupe

CS 116 - SENEM KUMOVA METIN

13

Base class Direct Derived class from “Vehicle”

Indirect Derived class from “Vehicle”Direct derived class from “Car”

Vehicle Car Coupe

Indirect Inheritanceclass Animal {public:

string species;float lifeExpectancy;bool warmBlooded; };

class Cat : public Animal{ public :

float favoritePrey[100][100]; };

class HouseCat: public Cat {public:

string toys [10000];string catDentist;string catDoctor;

};

CS 116 - SENEM KUMOVA METIN

14

HouseCat has totally 7 members;

• 3 of them is its own member;

• 1 of them are directly inherited from Cat;

• 3 of them are inherited indirectly from Animal

protected Members• In the absence of inheritance protected members are just like private

members• In public inheritance, a protected member can be accessed ( is visible) as

a protected member by the derived class

class BC{ public : void init_x();

protected: int get_x();private : int x;

void print_x(); };

class DC : public BC { public:

void g() { init_x(); // POSSIBLE

get_x(); // POSSIBLEcout <<x; // IMPOSSIBLEprint_x(); // IMPOSSIBLE

} }; CS 116 - SENEM KUMOVA METIN

15