fork download
  1. #include <stdio.h>
  2.  
  3. #define implements struct
  4.  
  5. typedef struct Hello {
  6. void (*hello)(void*);
  7. } Hello;
  8.  
  9. struct World {
  10. implements Hello super;
  11. };
  12.  
  13. void World_hello(void* this) { puts("Hello, World!"); }
  14.  
  15. Hello* newWorld() {
  16. struct World* world = (struct World*)malloc(sizeof(struct World));
  17. world->super.hello = *World_hello;
  18.  
  19. return (Hello*)world;
  20. }
  21.  
  22. struct Greeter {
  23. implements Hello super;
  24. char name[255];
  25. };
  26.  
  27. void Greeter_hello(void* this) { printf("Hello, %s!\n", ((struct Greeter*)this)->name); }
  28.  
  29. Hello* newGreeter(char* name) {
  30. struct Greeter* greeter = (struct Greeter*)malloc(sizeof(struct Greeter));
  31. greeter->super.hello = *Greeter_hello;
  32. strncpy(greeter->name, name, 254);
  33.  
  34. return (Hello*)greeter;
  35. }
  36.  
  37. void hello(Hello* object) {
  38. object->hello(object);
  39. }
  40.  
  41. int main() {
  42. Hello* world = newWorld();
  43. Hello* greeter = newGreeter("Programowanie Obiektowe");
  44.  
  45. hello(world);
  46. hello(greeter);
  47.  
  48. free(world);
  49. free(greeter);
  50.  
  51. return 0;
  52. }
  53.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
Hello, World!
Hello, Programowanie Obiektowe!