fork download
  1. /*
  2. пример ООП для C
  3. */
  4. // описание интерфейса с именем "interface"
  5. struct interface
  6. {
  7. struct interface_tab * iface;
  8. };
  9.  
  10. // описания класса "class1" реализующего интерфейс "interface"
  11. struct class1
  12. {
  13. struct interface_tab * iface;
  14. int field1;
  15. int field2;
  16. };
  17.  
  18. union interface_obj {
  19. struct interface iface;
  20. // добавляем сюда все классы реализующие этот интерфейс
  21. struct class1 class1;
  22. };
  23.  
  24. struct interface_tab
  25. {
  26. int (*metod1)(union interface_obj * ,int,int);
  27. int (*metod2)(union interface_obj * ,int);
  28. };
  29.  
  30. int class1_metod1(union interface_obj * self ,int a,int b)
  31. {
  32. self->class1.field1=a;
  33. self->class1.field2=b;
  34. return(1);
  35. }
  36. int class1_metod2(union interface_obj * self ,int a)
  37. {
  38. return(self->class1.field1*a + self->class1.field2);
  39. }
  40.  
  41. static struct interface_tab class1_iface =
  42. {
  43. class1_metod1,
  44. class1_metod2,
  45. };
  46.  
  47. // создание екземпляра класса "class1" с именем "obj"
  48. struct class1 class1_obj={&class1_iface,0,0};
  49.  
  50. // так ето работает:
  51. int main ()
  52. {
  53. union interface_obj * obj = (union interface_obj *)&class1_obj;
  54.  
  55. obj->iface.iface=&class1_iface;
  56.  
  57. obj->iface.iface->metod1(obj,3,6);
  58.  
  59. printf("result:%i\nwrite for 2ch.ru by Katalog-kun, 2008.12.11\nphone +7-903-513-64-21\n",
  60. obj->iface.iface->metod2(obj,10)
  61. );
  62.  
  63. return 0;
  64. }
  65.  
Success #stdin #stdout 0.01s 1676KB
stdin
Standard input is empty
stdout
result:36
write for 2ch.ru by Katalog-kun, 2008.12.11
phone +7-903-513-64-21