#include <stdio.h>

typedef struct Class{
 void (*Method1)(struct Class*);
 void (*Method2)(struct Class*);
 int field1;
 int field2;
}Class;

static void Class_Method1(Class* this){
 printf("%d\n",this->field1);
}

static void Class_Method2(Class* this){
 printf("%d\n",this->field2);
}

static Class* Class_Constractor(){
 Class* this = (Class*)malloc(sizeof(Class));
 this->Method1 = Class_Method1;
 this->Method2 = Class_Method2;
 this->field1 = 10;
 this->field2 = 20;
 return this;
}

static void SubClass_Method1(Class* this){
 printf("%d\n",this->field1+this->field2);
}

static void SubClass_Method2(Class* this){
 printf("%d\n",this->field1-this->field2);
}

static Class* SubClass_Constractor(){
 Class* this = Class_Constractor();
 this->Method1 = SubClass_Method1;
 this->Method2 = SubClass_Method2;
 return this;
}

int main(){

 Class* this = Class_Constractor();
 this->Method1(this);
 this->Method2(this);
 free(this);

 this = SubClass_Constractor();
 this->Method1(this);
 this->Method2(this);
 free(this);

 return 0;

}