cis 190: c/c++ programming - penn engineeringcis190/spring2014/lectures/11/lec11.pdf · review of...
TRANSCRIPT
![Page 1: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/1.jpg)
CIS 190: C/C++ Programming
Polymorphism
![Page 2: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/2.jpg)
Outline
• Review of Inheritance
• Polymorphism
– Car Example
– Virtual Functions
• Virtual Function Types
– Virtual Table Pointers
– Virtual Constructors/Destructors
![Page 3: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/3.jpg)
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
![Page 4: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/4.jpg)
What is Inherited
• public members
• protected members
• private
variables
Parent Class
• private functions • copy constructor • assignment operator • constructor • destructor
![Page 5: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/5.jpg)
What is Inherited Child Class
• subclass members
(functions & variables)
• public members
• protected members
• private
variables
Parent Class
• private functions • copy constructor • assignment operator • constructor • destructor
![Page 6: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/6.jpg)
Outline
• Review of Inheritance
• Polymorphism
– Car Example
– Virtual Functions
• Virtual Function Types
– Virtual Table Pointers
– Virtual Constructors/Destructors
![Page 7: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/7.jpg)
What is Polymorphism?
• ability to manipulate objects in a type-independent way
• already done to an extent via overloading
• can take it further using subtyping, AKA inclusion polymorphism
![Page 8: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/8.jpg)
Using Polymorphism
• only possible by using pointers to objects
• a pointer of a parent class type can point to an object of any child class type Vehicle *vehicPtr = &myCar;
• this is valid because myCar is-a Vehicle
![Page 9: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/9.jpg)
Outline
• Review of Inheritance
• Polymorphism
– Car Example
– Virtual Functions
• Virtual Function Types
– Virtual Table Pointers
– Virtual Constructors/Destructors
![Page 10: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/10.jpg)
Car Example
class SUV: public Car {/*etc*/};
class Sedan: public Car {/*etc*/};
class Van: public Car {/*etc*/};
class Jeep: public Car {/*etc*/};
SUV Sedan
Car
Jeep Van
![Page 11: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/11.jpg)
Car Example: Car Rental
• implement a catalog of cars available for rental
• how could we do this (using vectors)?
![Page 12: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/12.jpg)
Car Example: Car Rental
• implement a catalog of cars available for rental
• two options:
– separate vector for each type of Car (SUV, Van, etc.)
• have to add a new vector if we add new type
• must have separate variables for each vector
– single vector of Car pointers
• no changes necessary if we add new type
![Page 13: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/13.jpg)
Car Example: Car* vector
vector <Car*> rentalList;
SUV SUV Jeep Van Jeep Sedan Sedan SUV
vector of Car* objects
![Page 14: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/14.jpg)
Outline
• Review of Inheritance
• Polymorphism
– Car Example
– Virtual Functions
• Virtual Function Types
– Virtual Table Pointers
– Virtual Constructors/Destructors
![Page 15: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/15.jpg)
Polymorphism Limitations
• parent classes do not inherit from child classes – not even public member variables and functions
vehicPtr->PrintSpecs();
– will call Vehicle’s PrintSpecs() function, not Car’s
vehicPtr->Drive();
– will not work; Drive() is a function only of the Car class, and vehicPtr can’t access it
![Page 16: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/16.jpg)
Virtual Functions
• can grant access to child methods by using virtual functions
• to do this, declare the function in the parent class with the keyword virtual
– can also use virtual keyword in child class, but not required
![Page 17: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/17.jpg)
Virtual Function Example
class Vehicle{
virtual void Drive();
/* rest of vehicle class */
}
class Car: public Vehicle {
void Drive();
/* rest of car class */
}
![Page 18: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/18.jpg)
Outline
• Review of Inheritance
• Polymorphism
– Car Example
– Virtual Functions
• Virtual Function Types
– Virtual Table Pointers
– Virtual Constructors/Destructors
![Page 19: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/19.jpg)
Function Types – Pure Virtual
virtual void Drive() = 0;
• denoted with an “= 0” at end of declaration
• this makes the class an abstract class
• child classes must have an implementation of the pure virtual function
• cannot declare objects of abstract class types
![Page 20: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/20.jpg)
Function Types – Virtual
virtual void Drive();
• parent class must have an implementation
• child classes may override if they choose to – if not overridden, parent class definition used
![Page 21: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/21.jpg)
Function Types – Non-Virtual
void Drive();
• parent class should have an implementation
• child class cannot override function – parent class definition always used
• should be used only for functions that won’t be changed by child classes
![Page 22: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/22.jpg)
Outline
• Review of Inheritance
• Polymorphism
– Car Example
– Virtual Functions
• Virtual Function Types
– Virtual Table Pointers
– Virtual Constructors/Destructors
![Page 23: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/23.jpg)
Behind the Scenes
• assume our Drive() function is pure virtual
• how does the compiler know which child class’s version of the function to call?
SUV SUV Jeep Van Jeep Sedan Sedan SUV
vector of Car* objects
![Page 24: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/24.jpg)
Virtual Tables
• lookup tables of functions
– employed when we use polymorphism
• virtual tables are created for:
– classes with virtual functions
– child classes derived from those classes
• handled by compiler behind the scenes
![Page 25: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/25.jpg)
Virtual Table Pointer
• compiler adds a hidden variable that points to the appropriate virtual table of functions
SUV SUV Jeep Van Jeep Sedan Sedan SUV
![Page 26: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/26.jpg)
Virtual Table Pointer
• compiler adds a hidden variable that points to the appropriate virtual table of functions
SUV SUV Jeep Van Jeep Sedan Sedan SUV
*__vptr *__vptr *__vptr *__vptr *__vptr *__vptr *__vptr *__vptr
![Page 27: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/27.jpg)
Virtual Table Pointer
• compiler adds a hidden variable that points to the appropriate virtual table of functions
SUV SUV Jeep Van Jeep Sedan Sedan SUV
*__vptr *__vptr *__vptr *__vptr *__vptr *__vptr *__vptr *__vptr
SUV virtual table Jeep virtual table Van virtual table Sedan virtual table
![Page 28: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/28.jpg)
Virtual Table Pointer
• compiler adds a hidden variable that points to the appropriate virtual table of functions
SUV SUV Jeep Van Jeep Sedan Sedan SUV
*__vptr *__vptr *__vptr *__vptr *__vptr *__vptr *__vptr *__vptr
SUV virtual table
* to SUV::Drive();
Jeep virtual table
* to Jeep::Drive();
Van virtual table
* to Van::Drive();
Sedan virtual table
* to Sedan::Drive();
![Page 29: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/29.jpg)
Virtual Table Pointer
• compiler adds a hidden variable that points to the appropriate virtual table of functions
SUV SUV Jeep Van Jeep Sedan Sedan SUV
*__vptr *__vptr *__vptr *__vptr *__vptr *__vptr *__vptr *__vptr
SUV virtual table
* to SUV::Drive();
Jeep virtual table
* to Jeep::Drive();
Van virtual table
* to Van::Drive();
Sedan virtual table
* to Sedan::Drive();
![Page 30: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/30.jpg)
Outline
• Review of Inheritance
• Polymorphism
– Car Example
– Virtual Functions
• Virtual Function Types
– Virtual Table Pointers
– Virtual Constructors/Destructors
![Page 31: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/31.jpg)
Virtual Destructors
Vehicle *vehicPtr = new Car;
delete vehicPtr;
• non-virtual destructors will only invoke the base class’s destructor
• for any class with virtual functions, you must declare a virtual destructor as well
![Page 32: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/32.jpg)
Virtual Constructors
• not a thing... why?
![Page 33: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/33.jpg)
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
![Page 34: CIS 190: C/C++ Programming - Penn Engineeringcis190/spring2014/lectures/11/lec11.pdf · Review of Inheritance •specialization through sub classes •child class has direct access](https://reader034.vdocuments.us/reader034/viewer/2022043016/5f387e1eb0d96177b8154341/html5/thumbnails/34.jpg)
Project Alphas
• due next Monday (April 14th)
• doesn’t:
–have to be working
– a complete project
• in a folder named <your_team_name>