// demonstration of similarity/difference between templates // and polymorphism approaches // hussein suleman @ AIM @ CS @ UCT // 16 september 2003 #include #include "stdafx.h" #include #include // some random abstract base class with output and comparison declared class myData { public: virtual bool operator<=( myData& x ) = 0; virtual void output () = 0; }; // wrapper for an integer class myInt : public myData { public: int data; myInt () { data = rand(); } virtual bool operator<=( myData& x ) { myData* y = &x; myInt* z = ((myInt *)(y)); return (data <= z->data); } virtual void output () { printf ("%u\n", data); } }; // wrapper for a long integer class myLong : public myData { public: long data; myLong () { data = rand(); } virtual bool operator<=( myData& x ) { myData* y = &x; myLong* z = ((myLong *)(y)); return (data >= z->data); } virtual void output () { printf ("%ul\n", data); } }; // minimum of 3 items using templates template T& mintemp ( T& a, T& b, T& c ) { if (a<=b) if (a<=c) return a; if (b<=a) if (b<=c) return b; return c; } // minimum of 3 items using polymorphism myData& minpoly ( myData& a, myData& b, myData& c ) { if (a<=b) if (a<=c) return a; if (b<=a) if (b<=c) return b; return c; } // MAIN int _tmain(int argc, _TCHAR* argv[]) { // create arrays of 3 random integer and long objects respectively srand ((unsigned)time(NULL)); myInt i[3]; myLong l[3]; // output whole arrays i[0].output(); i[1].output(); i[2].output(); l[0].output(); l[1].output(); l[2].output(); // use template function to find minima printf ("minimum (template - int) = "); mintemp (i[0], i[1], i[2]).output(); printf ("minimum (template - long) = "); mintemp (l[0], l[1], l[2]).output(); // use polymorphic function to find minima printf ("minimum (polymorphism - int) = "); minpoly (i[0], i[1], i[2]).output(); printf ("minimum (polymorphism - long) = "); minpoly (l[0], l[1], l[2]).output(); _getch(); return 0; }