Download presentation
Presentation is loading. Please wait.
Published byGabriella Lloyd Modified over 9 years ago
1
CLASS INHERITANCE WEEK 7 Chapter 20 CS 116 - SENEM KUMOVA METIN1
2
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 METIN2
3
INHERITANCE EXAMPLES CS 116 - SENEM KUMOVA METIN3
4
INHERITANCE EXAMPLES A “GraduadeStudent” is a “Student” An “UndergraduateStudent” is also a “Student” “GraduadeStudent” is a specialization of “Student”OR “Student” is a generalization of “GraduadeStudent” Base classDerived classes StudentGraduateStudentUndergraduateStudent CS 116 - SENEM KUMOVA METIN4
5
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 publicly CS 116 - SENEM KUMOVA METIN5
6
BASIC CONCEPTS & SYNTAX 2 class 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 METIN6
7
BASIC CONCEPTS & SYNTAX 3 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; }; CS 116 - SENEM KUMOVA METIN7 Radius setRadius() getRadius() Diameter() Circumference() Circle height Volume() setHeigth() Cylinder Derived class Base class
8
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 Member Access Status in Cylinder How Obtained double radiusNot accessiblefrom Circle setRadius()public from Circle getRadius()publicfrom Circle Diameter()publicfrom Circle Circumference()publicfrom Circle double heightprivateits own member setHeigth()publicits own member Volume()publicits own member CS 116 - SENEM KUMOVA METIN8
9
Private members in Inheritance #include 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 METIN9 void main() { Cylinder x; x.setRadius(5); x.setHeight(2); cout << x.getRadius()<<endl; cout <<x.Volume(); cout<<x.Area(); } radius height Circle Cylinder
10
Adjusting Access 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; } 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 METIN10 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
11
Name Hiding class 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*r void 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
12
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 { /*... */ };
13
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 classDerived classes Vehicle Car Truck Bus … Base classDerived classes Car Coupe CS 116 - SENEM KUMOVA METIN13 Base classDirect Derived class from “Vehicle” Indirect Derived class from “Vehicle” Direct derived class from “Car” VehicleCarCoupe
14
Indirect Inheritance class 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 METIN14 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
15
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(); // POSSIBLE cout <<x; // IMPOSSIBLE print_x(); // IMPOSSIBLE }}; CS 116 - SENEM KUMOVA METIN15
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.