int main() { Animal *dog = initDog("Rocky", "Maltese"); Animal *cat = initCat("Felix", true); Animal *duck = initDuck("Daffy", 11903); Animal *animals[3] = {dog, cat, duck}; ((DogFunctions *) dog->functions)->guards(); ((CatFunctions *) cat->functions)->eats_mice(); ((DuckFunctions *) duck->functions)->are_smart(); printf("\n"); int i; for (i = 0; i < sizeof(animals)/sizeof(animals[0]); i++) { printf("%s the %s says %s!\n", animals[i]->name, say_type(animals[i]), animals[i]->functions->says()); if (animals[i]->type == DOG) printf("Breed: %s\n", ((DogData *) animals[i]->data)->breed); else if (animals[i]->type == CAT) ((CatData *) animals[i]->data)->is_friendly ? printf("Friendly cat\n") : printf("Unfriendly cat\n"); else if (animals[i]->type == DUCK) printf("Number of feathers: %d\n", ((DuckData *) animals[i]->data)->number_of_feathers); printf("\n"); animals[i]->del(animals[i]); } return 0; }
/*! * \en Creates catalog editor widget. \_en * \ru Создает виджет для редактирования каталога. * В принципе он не предусмотрен использоваться ни как иначе, кроме как часть * объекта wField, т.е его родительский объект должен быть wField * или его наследник для обеспечения корректной инициализации. * При создании объекта runtime не предусмотрено, за исключением случая, * когда виджет используется в составе wField в объекте wDBTable. * \param parent - \en parent object. \_en \ru родительский объект. \_ru * \param name - \en name \_en \ru имя \_ru * \param catname \en not used \_en \ru не используется \_ru */ wCatalogEditor::wCatalogEditor( wField *parent, const char *name, const char *catname) : QWidget(parent, name) { QWidget* w =0; md = NULL; QString str; label = new QLabel(parent, name); label->setFrameShape(QFrame::Box); w =(QWidget*) parent->parent()->parent(); str = parent->getFieldType(); catId = atoi(str.remove(0,2));// gets catalog id. if(w) { if(strcmp(w->className(),"wDBTable")==0) // wField is element wDBTable { initCat(((wDBTable*)w)->db); } } }