Because SOMClass is the root class for all metaclasses, M_Dog is derived from SOMClass. This is reflected in the Parent and Include sections in the class definition file for the M_Dog class. The only method that M_Dog defines is CreateADog, that is, the constructor that creates an instance of the dog class, as shown in the following sample code:
/* * This file was generated by the SOM compiler and Emitter Framework. * Generated using: SOM Emitter emitctm: 2.38 */ #ifndef SOM_Module_dogmeta_Source #define SOM_Module_dogmeta_Source #endif #define M_Dog_Class_Source #define Dog_Class_Source #include "dogmeta.ih" /* * Create an instance of the Dog class and return a pointer to it */ SOM_Scope Dog* SOMLINK CreateADog(M_Dog *somSelf) { Dog *aNewDog; aNewDog = _somNew(somSelf); /* M_DogData *somThis = M_DogGetData(somSelf); */ M_DogMethodDebug("M_Dog","CreateADog"); /* Return statement to be customized */ return(aNewDog); } /* * Display characteristics for this dog. * Show the breed and make the dog speak. */ SOM_Scope void SOMLINK display(Dog *somSelf) { DogData *somThis = DogGetData(somSelf); DogMethodDebug("Dog","display"); /* Note there are two underscores before the get_breed below */ printf("\nMy breed is %s.\n", __get_breed(somSelf)); printf("I say:\n"); /* Prefix method name with either an underscore or somThis */ _bark(somSelf); } /* * Have the dog bark */ SOM_Scope void SOMLINK bark(Dog *somSelf) { DogData *somThis = DogGetData(somSelf); DogMethodDebug("Dog","bark"); printf("Unknown dog noise\n"); /* Speak! */ }