1/30 Chapter 8: Dynamic Binding And Abstract classes
2/30 Objectives What is static binding? What is Dynamic binding? Restriction of overriding methods Virtual method Virtual function table Type conformity Abstract classes A demonstration
3/ Static binding 5 Circle Constructor class Circle { int x,y,r; public: Circle (int xx, int yy, int rr) { x=xx; y=yy; r=rr; } void print() { cout <<x<<y<<r; } }; void main() { Circle c(3,4,5); c.print(); } 4 3 Circle print() main() [180,65520] [120,65520] c Data is associated with corresponding code at compile-time
4/ Dynamic binding pc Circle Constructor class Circle { int x,y,r; public: Circle (int xx, int yy, int rr) { x=xx; y=yy; r=rr; } void print() { cout <<x<<y<<r; } }; void main() { Circle *pc; pc= new Circle(3,4,5); pc->print(); } Circle print() main() [180,[65540]] [120,[65540]] Data is associated with corresponding code at run-time 5 Circle Constructor 4 3 Circle print() main() [180,1200] [120,1200] 1200
5/ Restriction of overriding Functions Perhaps, you want to see Son on the screen.
6/ Virtual Functions- Polymorphism Polymorphism ability occurs only when you use a pointer to an object and used-methods of classes are virtual methods virtual ReturnType or ReturnType virtual are accepted
7/ Virtual Function Table Nephew::print() Son::print() Father::print() [print, 600] […, …] VFT- Nephew VFT- Son VFT- Father [print, 500] […, …] [print, 400] […, …] main() [600, dataX] [500,dataX] [400,dataX] 800
8/ Type Conformity Pointer of base class can point to an subclass object Down Type casting OK
9/30 Type conformity…. Error: Can not convert Point2* to Pont3* Opposite Type casting NO OK
10/30 Type conformity…. Explicit Type casting OK
11/30 Type conformity… Two classes have no relation. Explicit type casting OK
12/ Abstract class Result of so-high generation class Circle int x,y,r; void print() double area() double perimeter() class Rectangle int x1,y1,x2,y2; void print() double area() double perimeter() class Triangle int x1,y1,x2,y2,x3,y3; void print() double area() double perimeter() class Shape void print() double area() double perimeter() How will we implement these methods? Pure virtual methods
13/30 Abstract class… Abstract class must have at least one pure virtual method Pure virtual method is a method with no body. Syntax of pure virtual method: virtual DataType Method (…) = 0; You cannot create an object of abstract class but you can declare a pointer of abstract class. This pointer must be point to an object of a concrete class.
14/30 Abstract class….
15/30 Abstract subclass Error: Cannot create instance of abstract class B A is an abstract class B is public subclass of A In B, the inherited method MA() is not overriden yet B is abstract class
16/30 Abstract subclass… Subclass of a concrete class may be an abstract class. Error: Cannot create instance of abstract class B
17/ A Demonstration The following program depicts using abstract class. People generate all concrete classes as Circle, Rectangle,… into Shape class. User will input some shape details Program will print out details of all shape Values of area and perimeter of each shape will be printed also.
18/30 Class Shape and Circle
19/30 Class Rectangle
20/30 Class ShapeList
21/30 Class ShapeList…, main(), Result
22/ Class Object elements and Class Vector for arbitrary elements
23/ …
24/ Class Student:public Object
25/ Class Circle:public Object
26/ Main
27/30 Summary Virtual Method is a way to make polymorphism. Syntax for virtual method: virtual ReturnType Method (parameters) ReturnType virtual Method (parameters) Compiler will determine the right method will be called using a virtual function table for every class which contains virtual methods. Pure virtual method is a virtual method but it has no code. Syntax for pure virtual method: virtual ReturnType Method (parameters)=0;
28/30 Summary Abstract class is a result of so-high generation. Abstract class must have at least one pure virtual method. You can not create an object of abstract class but you can declare a pointer to it then, it points to an object of a concrete subclass.
29/30 Exercises Using the class Object, implement classes: Father, Mother, Son, Daughter. Write a program will –Input a list of members in a family. Store them into a Vector object. –Print out members of the family.
30/30 Thanks