binding
play

Binding Static - Early Binding - Determined at Compile Time Dynamic - PDF document

12. Polymorphism: Concept, Virtual Functions Virtual Function class Employee { Employee bruce; char* name; char* title; Manager bob; public: Employee (char* nme, char* ttl); Employee* eptr; virtual void print() { cout << name


  1. 12. Polymorphism: Concept, Virtual Functions Virtual Function class Employee { Employee bruce; char* name; char* title; Manager bob; public: Employee (char* nme, char* ttl); Employee* eptr; virtual void print() { cout << name << “ “ << ttl; } eptr = &bruce; }; ... eptr = &bob; class Manager : public Employee { ... int level; Employee* manages_list; eptr->print(); // What does eptr point to? public: Manager( char* nme, char* ttl, int lev ); // What gets printed? virtual void print() { Employee::print(); cout << “ “ << level; }; ...

  2. Binding Static - Early Binding - Determined at Compile Time Dynamic - Late Binding - Determined at Run Time Example: Employee bruce; Employee* eptr; ... static bruce.print(); //______________ dynamic eptr->print(); //______________ void SecurityCheck(Employee& emp) dynamic {emp.print(); //______________ ...} void foo(Employee theemp) static {theemp.print(); //______________... } Polymorphism: Virtual Functions Virtual functions Override function definitions in the base class The derived class may override a virtual function defined in the base class - Should have the same signature and return type Keep in mind “ Substitutability”

  3. Overloading Vs. Overriding Overloaded Functions Overridden Functions Same Scope Different Scope Same Name Same Name Different Signature Same Signature Virtual Not Required Virutal Required Improper Overriding : Function Hiding A Derived class function hides (instead of overriding) a base class function with the same name if the derived class function has • Different Signature • Same signature & non-virtual in Base

  4. Example of Virtual Functions class Base { Derived::f(float); public: ... overrides virtual void f(float x); Base::f(float); virtual void g(float x); void h(float x); }; Derived::g(int); hides class Derived : public Base { Base::g(float); public : ... virtual void f(float x); virtual void g(int x); Derived::h(float); virtual void h(float x); hides }; Base::h(float); Open-Close Principle “Software Entities ( Classes, modules, Functions, etc. ) should be • Open for Extension (in behavior) • Closed for Modification (of Code)”

  5. Lab Work: Details provided on-line.

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend