Senem Kumova Metin STRUCTURES continues CHAPTER 9 in A Book in C.
CLASS INHERITANCE WEEK 7 Chapter 20 CS 116 - SENEM KUMOVA METIN1.
-
Upload
gabriella-lloyd -
Category
Documents
-
view
224 -
download
0
Transcript of CLASS INHERITANCE WEEK 7 Chapter 20 CS 116 - SENEM KUMOVA METIN1.
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