Lecture Notes for Advanced Programming II

15 April 2003 - Implementing Subtype Polymorphism


Outline


Member-Function Look-Up


Subtype Polymorphism vs. Static Look-Up


Dynamic Look-Up


Static vs. Dynamic Look-Up


Declaring Virtual Member Functions


Virtual Member Function Examples

class DeviceInterface {
  bool initialized(void);
  virtual status open(...) { }
  }

class VirtualFileSystem : DeviceInterface {
  virtual status rename(...) { }
  }

class ext2 : VirtualFileSystem {
  status open(...) { ... } 
  status rename(...) { ... }
  }

class ntfs : VirtualFileSystem {
  virtual status open(...) { ... }
  virtual bool initialized(void);
  }


Virtual Member Function Gotchas


A Little Quiz


The Virtual Flip-Flop


Virtual Destructors


A Heart-Felt Question


Virtual Function Definitions


Matching Virtual Functions


Virtual Functions Matched


Don't Forget the const


Not Even Children are Spared

$ cat t.cc
struct shape { ... }
struct circle : shape { ... }

struct A
  virtual void hi(shape *) { ... }
struct B : A
  void hi(circle *) { ... }
struct C : B
  void hi(shape * ) { ... }

int main()
  A * ap = new C()
  B * bp = new C()
  circle * cp
  ap->hi(cp)
  bp->hi(cp)

$ g++ -o t -ansi -pedantic -Wall t.cc

$ ./t
in C::hi(shape *)
in B::hi(circle *)

$ CC -o t t.cc

$ ./t
in C::hi(shape *)
in B::hi(circle *)

$ 


Abstract Virtual Functions


Abstract Virtual Properties


Points to Remember


This page last modified on 22 April 2003.