// File: vtest.cpp // // Testing virtual functions #include #include "Box.h" #include "Cube.h" #include "ColorCube.h" using namespace std ; void foo(Box& boxref) { boxref.identify() ; // identify is VIRTUAL } int main() { Box b(1.2, 2.4, 2.4) ; Cube c(7.1) ; ColorCube cc(2.3, ColorCube::blue) ; cout << "Box identify:\n" ; foo(b) ; cout << "\nCube identify:\n" ; foo(c) ; cout << "\nColorCube identify:\n" ; foo(cc) ; Box::report() ; cout << "\n\nSome sizes:\n" ; cout << " sizeof(Box) = " << sizeof(Box) << "\n" ; cout << " sizeof(Cube) = " << sizeof(Cube) << "\n" ; cout << " sizeof(ColorCube) = " << sizeof(ColorCube) << "\n" ; // Some really bad behavior follows: int **ptr1 = (int **) &b ; // point to b's virtual function pointer int **ptr2 = (int **) &cc ; // point to cc's virtual function pointer *ptr2 = *ptr1 ; cc.identify() ; foo(cc) ; }