ex7-11.cpp - Example 7-11 Virtual Functions (2)

// File: ex7-11.cpp

#include <iostream>
using namespace std;

class B
{
  protected:
    int b;
  public:
    B() { cout << "B ctor called for " << this << endl; b = 0; }
    virtual void virt() 
      { cout << "B::virt() called for " << this << endl; }
};

class D : public B
{
  protected:
    int d;
  public:
    D() { cout << "D ctor called for " << this << endl; d = 0;}
    void non_virt2() 
      { cout << "D::non_virt2() called for " << this << endl; }
};

int main() {
  B b;			 // declare a base object
  D d;			 // declare a derived object

  b.virt();		 // invoke virt() through a base object
  d.virt();		 // invoke virt() through a derived object

  B* pb;			 // pb is a pointer to a base class object
  pb = &b;		 // pb points to b

  pb->virt();		 // invoke virt() through a base pointer
                     //   to a base object

  pb = &d;		 // pb points to d
  pb->virt();		 // invoke virt() through a base pointer
                     //   to a derived object

  cout << "size of b = " << sizeof b << endl;
  cout << "size of d = " << sizeof d << endl;
  d.non_virt2();	 // invoke non_virt2() through derived object
//  pb->non_virt2(); Error:  non_virt2() is not a member of B
  return 0;
}




CIS27: Programming in C++    Instructor: Joe Bentley