Listing 2

CLASS *new_CLASS() {
   SUPER_CLASS *s;
   CLASS *this;
   
   /*  Construct super class */
   s = new_SUPER_CLASS();
   
   /*  Allocate memory for this object */
   this = calloc(1,sizeof(CLASS));
    
    /*  Inherit everything you can from the superclass */
   memmove(this,s,sizeof(CLASS);
   
   /*  We're done with the superclass's memory */
   free(s);
   
   /*  Assign methods to object */
      this->f1 = f1;
   
   /*  Inialize attributes here. Open files, allocate etc.*/
    
    return(this);
}

void destroy_CLASS(CLASS *this) {
   /*  Free any specific data: */
      free(this->p);
   
   /*  Close any files specific to this class: */
      fclose(this->file);
   
   /*  Call the superclass's destructor */
      destroy_SUPER_CLASS(this);

}

void destroy_SUPER_CLASS(SUPER_CLASS *this) {
   free(this);
}