#include #include // define a pure virtual class Comparable class Comparable { public: Comparable(void) {} virtual int equals( const Comparable *b ) = 0; virtual int greaterthan( const Comparable *b ) = 0; virtual int lessthan( const Comparable *b ) = 0; }; class Thing : Comparable { int value; public: Thing() { value = 0; } Thing(const int a) { value = a; } void set(const int a) { value = a; } int get(void) { return(value); } int equals( const Comparable *b ) { return( this->value == ((Thing *)b)->value ); } int greaterthan( const Comparable *b ) { return( this->value > ((Thing *)b)->value ); } int lessthan( const Comparable *b ) { return( this->value < ((Thing *)b)->value ); } }; class Thing2 : Comparable { unsigned char value; public: Thing2() { value = 0; } Thing2(const char a) { value = a; } void set(const char a) { value = a; } char get(void) { return(value); } int equals( const Comparable *b ) { return( this->value == ((Thing2 *)b)->value ); } int greaterthan( const Comparable *b ) { return( this->value > ((Thing2 *)b)->value ); } int lessthan( const Comparable *b ) { return( this->value < ((Thing2 *)b)->value ); } }; int ComparableSort(const void *a, const void *b) { Comparable *ac = (Comparable *)a; Comparable *bc = (Comparable *)b; if( ac->equals( bc ) ) return(0); else if( ac->greaterthan( bc) ) return(1); else return(-1); } int main(int argc, char *argv[]) { Thing *thing = new Thing[10]; printf("thing: "); for(int i=0;i<10;i++) { thing[i].set( random() % 100 ); printf("%d ", thing[i].get()); } printf("\n"); // ComparableSort will work for any class inheriting it qsort( thing, 10, sizeof(Thing), ComparableSort ); printf("thing: "); for(int i=0;i<10;i++) { printf("%d ", thing[i].get()); } printf("\n"); delete[] thing; Thing2 *thing2 = new Thing2[10]; printf("thing2: "); for(int i=0;i<10;i++) { thing[i].set( random() % 26 + 'a' ); printf("%c ", thing[i].get()); } printf("\n"); // ComparableSort will work for any class inheriting it qsort( thing2, 10, sizeof(Thing2), ComparableSort ); printf("thing2: "); for(int i=0;i<10;i++) { printf("%c ", thing[i].get()); } printf("\n"); return(0); }