Computer Notes - Abstract Class

0

No comments posted yet

Comments

Slide 1

Abstract Class http://ecomputernotes.com

Slide 2

Abstract Class Shape Line Circle Triangle draw calcArea draw calcArea draw calcArea draw calcArea http://ecomputernotes.com

Slide 3

Abstract Class Implements an abstract concept Cannot be instantiated Used for inheriting interface and/or implementation http://ecomputernotes.com

Slide 4

Concrete Class Implements a concrete concept Can be instantiated May inherit from an abstract class or another concrete class http://ecomputernotes.com

Slide 5

Abstract Classes in C++ In C++, we can make a class abstract by making its function(s) pure virtual Conversely, a class with no pure virtual function is a concrete class http://ecomputernotes.com

Slide 6

Pure Virtual Functions function A pure virtual represents an abstract behavior and therefore may not have its implementation (body) A function is declared pure virtual by following its header with “= 0” virtual void draw() = 0; http://ecomputernotes.com

Slide 7

… Pure Virtual Functions A class having pure virtual function(s) becomes abstract class Shape { … public: virtual void draw() = 0; } … Shape s; // Error!

Slide 8

… Pure Virtual Functions A derived class of an abstract class remains abstract until it provides implementation for all pure virtual functions http://ecomputernotes.com

Slide 9

Shape Hierarchy Shape Line Circle Quadrilateral draw = 0 draw draw Rectangle draw http://ecomputernotes.com

Slide 10

… Pure Virtual Functions class Quadrilateral : public Shape { … // No overriding draw() method } … Quadrilateral q; // Error! http://ecomputernotes.com

Slide 11

… Pure Virtual Functions class Rectangle:public Quadrilateral{ … public: // void draw() virtual void draw() { … // function body } } … Rectangle r; // OK http://ecomputernotes.com

Slide 12

Virtual Destructors class Shape { … public: ~Shape() { cout << “Shape destructor called\n”; } } http://ecomputernotes.com

Slide 13

…Virtual Destructors class Quadrilateral : public Shape { … public: ~Quadrilateral() { cout << “Quadrilateral destructor called\n”; } } http://ecomputernotes.com

Slide 14

…Virtual Destructors class Rectangle : public Quadrilateral { … public: ~Rectangle() { cout << “Rectangle destructor called\n”; } } http://ecomputernotes.com

Slide 15

…Virtual Destructors When delete operator is applied to a base class pointer, base class destructor is called regardless of the object type http://ecomputernotes.com

Slide 16

…Virtual Destructors int main() { Shape* pShape = new Rectangle(); delete pShape; return 0; } Output Shape destructor called http://ecomputernotes.com

Slide 17

Result Shape Part Quad Part Rect Part pShape Quad Part Rect Part Before After pShape http://ecomputernotes.com

Slide 18

Virtual Destructors Make the base class destructor virtual class Shape { … public: virtual ~Shape() { cout << “Shape destructor called\n”; } } http://ecomputernotes.com

Slide 19

…Virtual Destructors class Quadrilateral : public Shape { … public: virtual ~Quadrilateral() { cout << “Quadrilateral destructor called\n”; } } http://ecomputernotes.com

Slide 20

…Virtual Destructors class Rectangle : public Quadrilateral { … public: virtual ~Rectangle() { cout << “Rectangle destructor called\n”; } } http://ecomputernotes.com

Slide 21

…Virtual Destructors Now base class destructor will run after the derived class destructor http://ecomputernotes.com

Slide 22

…Virtual Destructors int main() { Shape* pShape = new Recrangle(); delete pShape; return 0; } Output Rectangle destructor called Quadilateral destructor called Shape destructor called http://ecomputernotes.com

Slide 23

Result Shape Part Quad Part Rect Part pShape Before After pShape http://ecomputernotes.com

Slide 24

Virtual Functions – Usage Inherit interface and implementation Just inherit interface (Pure Virtual) http://ecomputernotes.com

Slide 25

Inherit interface and implementation Shape Line Circle Triangle draw = 0 calcArea draw draw calcArea draw calcArea

Slide 26

…Inherit interface and implementation class Shape { … virtual void draw() = 0; virtual float calcArea() { return 0; } } http://ecomputernotes.com

Slide 27

…Inherit interface and implementation Each derived class of Shape inherits default implementation of calcArea() Some may override this, such as Circle and Triangle Others may not, such as Point and Line http://ecomputernotes.com

Slide 28

…Inherit interface and implementation Each derived class of Shape inherits interface (prototype) of draw() Each concrete derived class has to provide body of draw() by overriding it http://ecomputernotes.com

Slide 29

V Table Compiler builds a virtual function table (vTable) for each class having virtual functions A vTable contains a pointer for each virtual function http://ecomputernotes.com

Slide 30

Example – V Table int main() { Point p1( 10, 10 ), p2( 30, 30 ); Shape* pShape; pShape = new Line( p1, p2 ); pShape->draw(); pShape->calcArea(); } http://ecomputernotes.com

Slide 31

Example – V Table calcArea draw … Shape vTable draw … Line vTable calcArea Line object 0 pShape http://ecomputernotes.com

Slide 32

Dynamic Dispatch For non-virtual functions, compiler just generates code to call the function In case of virtual functions, compiler generates code to access the object access the associated vTable call the appropriate function http://ecomputernotes.com

Slide 33

Conclusion Polymorphism adds Memory overhead due to vTables Processing overhead due to extra pointer manipulation However, this overhead is acceptable for many of the applications Moral: “Think about performance requirements before making a function virtual” http://ecomputernotes.com

Summary: http://ecomputernotes.com - Computer Notes - Abstract Class in Object oriented Programming what is Abstract Class OOPs Explain about it in detail .explain it with example

Tags: computer notes abstract class

URL:
More by this User
Most Viewed