Presentation is loading. Please wait.

Presentation is loading. Please wait.

Virtual Functions Fall 2008 Dr. David A. Gaitros

Similar presentations


Presentation on theme: "Virtual Functions Fall 2008 Dr. David A. Gaitros"— Presentation transcript:

1 Virtual Functions Fall 2008 Dr. David A. Gaitros dgaitros@admin.fsu.edu

2 Virtual Functions Most of the time the compiler “binds” a function call to it’s definition after which no changes are allowed. This means that in order to accommodate all scenarios, you have to write your software from the start to account for them. Changes to requirements required that you modify the code. with Virtual functions we can accommodate changes in a more convenient fashion.

3 Virtual Functions Example taken from the Savitch Book: class Sale { public: Sale(); Sale(double thePrice); double getPrice() const; virtual double bill() const; double savings(const Sale& other) const; private: double price; }; Note the word “virtual” before the declaration of double bill() const; This means that at a later date, a class that inherits the class Sale can redefine this member function.

4 Virtual Functions Here is what the original member implementation looks like: double Sale::bill() const { return price; }

5 Here is what a new class that inherits the class looks like that redefines the member function bill. namespace SavitSale { class DiscountSale: public Sale { public: DiscountSale(); double getDiscount()const; void setDiscount (double d); double bill() const; private: double discount; }; } // end SavitSale

6 Virtual Functions A virtual function is indicated by including the modifier virtual in the member function declaration. If a function is virtual and a new definition of the function is given in a derived class, then for any object of the derived class, that object will always use the new definition. Even if it is invoked in the inherited function. This is called late binding.

7 Virtual Functions Virtual function in base class: – "Automatically" virtual in derived class Derived class declaration (in interface) – Not required to have "virtual" keyword – But typically included anyway, for readability The “virtual” term tells the compiler to wait to define it until it is called.

8 Virtual functions Clear advantages to virtual functions as we’ve seen One major disadvantage: overhead! – Uses more storage – Late binding is "on the fly", so programs run slower (Much slower) So if virtual functions not needed, should not be used. If you know all of the functionality, go ahead and program it.

9 Virtual Destructors Recall: destructors needed to de- allocate dynamically allocated data Consider: Base *pBase = new Derived; … delete pBase; – Would call base class destructor even though pointing to Derived class object! – Making destructor virtual fixes this! Good policy for all destructors to be virtual in production programming

10 Inner Workings of Virtual Functions Don’t need to know how to use it! – Principle of information hiding Virtual function table – Compiler creates it – Has pointers for each virtual member function – Points to location of correct code for that function Objects of such classes also have pointer – Points to virtual function table

11 Abstract Classes Pure virtual functions are defined as those functions that have no exact definition at the time of compile. Example ( Myers’ Employee) #ifndef _EMPLOYEE_H #define _EMPLOYEE_H class Employee { public: virtual void PrintCheck()=0; protected: float netPay; Employee(); Employee(char* n, char* a, char* ssn); char name[30]; char address[80]; char socSecNumber[12]; };

12 Abstract Classes Note the “=0” in the PrintCheck function declaration. This tells compiler that there will be no implementation seen at this time. Any class with at least one pure virtual Function is known as an “Abstract Class”. Abstract classes can be used to build pointers to a class which you may want to define at a later time. Templates are coming!


Download ppt "Virtual Functions Fall 2008 Dr. David A. Gaitros"

Similar presentations


Ads by Google