Question? Leave a message!




Application of Polymorphism

Application of Polymorphism
CIS 190: C/C++ Programming Lecture 11 Polymorphism 1 Outline • Review of Inheritance • Polymorphism – Limitations – Virtual Functions – Abstract Classes & Function Types – Virtual Function Tables – Virtual Destructors/Constructors • Application of Polymorphism • Project Alphas 2 Review of Inheritance • specialization through sub classes • child class has direct access to – parent member functions and variables that are • ??? 3 Review of Inheritance • specialization through sub classes • child class has direct access to – parent member functions and variables that are • public • protected 4 Review of Inheritance • specialization through sub classes • child class has direct access to – parent member functions and variables that are: • public • protected • parent class has direct access to: – ??? in the child class 5 Review of Inheritance • specialization through sub classes • child class has direct access to – parent member functions and variables that are: • public • protected • parent class has direct access to: – nothing in the child class 6 What is Inherited Parent Class • public members • private functions • protected • copy constructor members • assignment operator • constructor • private • destructor variables 7 What is Inherited Child Class Parent Class • public members • private functions • child class • protected • copy constructor members members • assignment operator (functions & • constructor variables) • private • destructor variables 8 Outline • Review of Inheritance • Polymorphism – Limitations – Virtual Functions – Abstract Classes & Function Types – Virtual Function Tables – Virtual Destructors/Constructors • Application of Polymorphism • Project Alphas 9 Car Example Car SUV Sedan Van Jeep class SUV: public Car /etc/; class Sedan: public Car /etc/; class Van: public Car /etc/; class Jeep: public Car /etc/; 10 Car Rental Example • we want to implement a catalog of different types of cars available for rental • how could we do this? 11 Car Rental Example • we want to implement a catalog of different types of cars available for rental • how could we do this? • can accomplish this with a single vector – using polymorphism 12 What is Polymorphism? • ability to manipulate objects in a type-independent way 13 What is Polymorphism? • ability to manipulate objects in a type-independent way • already done to an extent via overriding – child class overrides a parent class function 14 What is Polymorphism? • ability to manipulate objects in a type-independent way • already done to an extent via overriding – child class overrides a parent class function • can take it further using subtyping, AKA inclusion polymorphism 15 Using Polymorphism • a pointer of a parent class type can point to an object of a child class type Vehicle vehiclePtr = &myCar; • why is this valid? 16 Using Polymorphism • a pointer of a parent class type can point to an object of a child class type Vehicle vehiclePtr = &myCar; • why is this valid? – because myCar is-a Vehicle 17 Polymorphism: Car Rental vector Car rentalList; vector of Car objects 18 Polymorphism: Car Rental vector Car rentalList; vector of Car objects SUV SUV Jeep Van Jeep Sedan Sedan SUV • can populate the vector with any of Car’s child classes 19 Outline • Review of Inheritance • Polymorphism – Limitations – Virtual Functions – Abstract Classes & Function Types – Virtual Function Tables – Virtual Destructors/Constructors • Application of Polymorphism • Project Alphas 20 Limitations of Polymorphism • parent classes do not inherit from child classes – what about public member variables and functions? 21 Limitations of Polymorphism • parent classes do not inherit from child classes – not even public member variables and functions 22 Limitations of Polymorphism • parent classes do not inherit from child classes – not even public member variables and functions Vehicle vehiclePtr = &myCar; 23 Limitations of Polymorphism • parent classes do not inherit from child classes – not even public member variables and functions Vehicle vehiclePtr = &myCar; • which version of PrintSpecs() does this call? vehiclePtr-PrintSpecs(); 24 Limitations of Polymorphism • parent classes do not inherit from child classes – not even public member variables and functions Vehicle vehiclePtr = &myCar; • which version of PrintSpecs() does this call? vehiclePtr-PrintSpecs(); Vehicle::PrintSpecs() 25 Limitations of Polymorphism • parent classes do not inherit from child classes – not even public member variables and functions Vehicle vehiclePtr = &myCar; • will this work? vehiclePtr-RepaintCar(); 26 Limitations of Polymorphism • parent classes do not inherit from child classes – not even public member variables and functions Vehicle vehiclePtr = &myCar; • will this work? vehiclePtr-RepaintCar(); – NO RepaintCar() is a function of the Car child class, not the Vehicle class 27 • Review of Inheritance • Polymorphism – Limitations – Virtual Functions – Abstract Classes & Function Types – Virtual Function Tables – Virtual Destructors/Constructors • Application of Polymorphism • Project Alphas 28 Virtual Functions • can grant access to child methods by using virtual functions • virtual functions are how C++ implements late binding – used when the child class implementation is unknown or variable at parent class creation time 29 Late Binding • simply put, binding is determined at run time – as opposed to at compile time • in the context of polymorphism, you’re saying I don’t know for sure how this function is going to be implemented, so wait until it’s used and then get the implementation from the object instance. 30 Using Virtual Functions • declare the function in the parent class with the keyword virtual in front virtual void Drive(); 31 Using Virtual Functions • declare the function in the parent class with the keyword virtual in front virtual void Drive(); • only use virtual with the prototype // don’t do this virtual void Vehicle::Drive(); 32 Using Virtual Functions • the corresponding child class function does not require the virtual keyword • but… 33 Using Virtual Functions • the corresponding child class function does not require the virtual keyword • should still include it, for clarity’s sake – makes it obvious the function is virtual, even without looking at the parent class // inside the Car class virtual void Drive(); 34 Outline • Review of Inheritance • Polymorphism – Limitations – Virtual Functions – Abstract Classes & Function Types – Virtual Function Tables – Virtual Destructors/Constructors • Application of Polymorphism • Project Alphas 35 Function Types – Virtual virtual void Drive(); • parent class must have an implementation – even if it’s trivial or empty • child classes may override if they choose to – if not overridden, parent class definition used 36 Function Types – Pure Virtual virtual void Drive() = 0; • denote pure virtual by the “ = 0” at the end 37 Function Types – Pure Virtual virtual void Drive() = 0; • denote pure virtual by the “ = 0” at the end • the parent class has no implementation of this function – child classes must have an implementation 38 Function Types – Pure Virtual virtual void Drive() = 0; • denote pure virtual by the “ = 0” at the end • the parent class has no implementation of this function – child classes must have an implementation – parent class is now an abstract class 39 Abstract Classes • an abstract class is one that contains a function that is pure virtual 40 Abstract Classes • an abstract class is one that contains a function that is pure virtual • cannot declare abstract class objects – why? 41 Abstract Classes • an abstract class is one that contains a function that is pure virtual • cannot declare abstract class objects – why? • this means abstract classes can only be used as base classes 42 Applying Virtual to Shape, etc. • how should we label the following functions? (virtual, pure virtual, or leave alone) CalculateArea(); CalculatePerimeter(); Print(); SetColor(); 43 Outline • Review of Inheritance • Polymorphism – Limitations – Virtual Functions – Abstract Classes & Function Types – Virtual Function Tables – Virtual Destructors/Constructors • Application of Polymorphism • Project Alphas 44 Behind the Scenes • if our Drive() function is virtual, how does the compiler know which child class’s version of the function to call? vector of Car objects SUV SUV Jeep Van Jeep Sedan Sedan SUV 45 Virtual Function Tables • the compiler uses virtual function tables whenever we use polymorphism • virtual function tables are created for: – what types of classes? 46 Virtual Function Tables • the compiler uses virtual function tables whenever we use polymorphism • virtual function tables are created for: – classes with virtual functions – child classes of those classes 47 Virtual Table Pointer SUV SUV Jeep Van Jeep Sedan Sedan Van 48 Virtual Table Pointer • the compiler adds a hidden variable SUV SUV Jeep Van Jeep Sedan Sedan Van __vptr __vptr __vptr __vptr __vptr __vptr __vptr __vptr 49 Virtual Table Pointer • the compiler also adds a virtual table of functions for each class SUV SUV Jeep Van Jeep Sedan Sedan Van __vptr __vptr __vptr __vptr __vptr __vptr __vptr __vptr SUV virtual table Jeep virtual table Van virtual table Sedan virtual table 50 Virtual Table Pointer • each virtual table has pointers to each of the virtual functions of that class SUV SUV Jeep Van Jeep Sedan Sedan Van __vptr __vptr __vptr __vptr __vptr __vptr __vptr __vptr SUV virtual table Jeep virtual table Van virtual table Sedan virtual table to SUV::Drive(); to Jeep::Drive(); to Van::Drive(); to Sedan::Drive(); 51 Virtual Table Pointer • the hidden variable points to the appropriate virtual table of functions SUV SUV Jeep Van Jeep Sedan Sedan Van __vptr __vptr __vptr __vptr __vptr __vptr __vptr __vptr SUV virtual table Jeep virtual table Van virtual table Sedan virtual table to SUV::Drive(); to Jeep::Drive(); to Van::Drive(); to Sedan::Drive(); 52 Virtual Everything • in Java, all functions are virtual by default – everything seems to work fine for Java • why don’t we make all our functions virtual in C++ classes? – ??? 53 Virtual Everything • in Java, all functions are virtual by default – everything seems to work fine for Java • why don’t we make all our functions virtual in C++ classes? – non-virtual functions can’t be overridden (in the context of parent class pointers) – creates unnecessary overhead 54 Outline • Review of Inheritance • Polymorphism – Limitations – Virtual Functions – Abstract Classes & Function Types – Virtual Function Tables – Virtual Destructors/Constructors • Application of Polymorphism • Project Alphas 55 Virtual Destructors Vehicle vehicPtr = new Car; delete vehicPtr; • for any class with virtual functions, you must declare a virtual destructor as well • why? 56 Virtual Destructors Vehicle vehicPtr = new Car; delete vehicPtr; • for any class with virtual functions, you must declare a virtual destructor as well • non-virtual destructors will only invoke the base class’s destructor 57 Virtual Constructors • not a thing... why? 58 Virtual Constructors • not a thing... why? • we use polymorphism and virtual functions to manipulate objects without knowing type or having complete information about the object • when we construct an object, we have complete information – there’s no reason to have a virtual constructor 59 Outline • Review of Inheritance • Polymorphism – Limitations – Virtual Functions – Abstract Classes & Function Types – Virtual Function Tables – Virtual Destructors/Constructors • Application of Polymorphism • Project Alphas 60 Application of Polymorphism • examine polymorphism and virtual functions • using these classes: – Animal • Bird • Cat • Dog LIVECODING LIVECODING 61 Outline • Review of Inheritance • Polymorphism – Limitations – Virtual Functions – Abstract Classes & Function Types – Virtual Function Tables – Virtual Destructors/Constructors • Application of Polymorphism • Project Alphas 62 Project Alphas • due next Sunday (November 23rd) • doesn’t: – have to be working – a complete project • in a folder named your_team_name 63 Next Time • take an (anonymous) in-class survey for 1% overall extra credit • receive feedback on your project proposal • have some say in what we cover during our last (gasp sob) class together 64
Website URL
Comment