Advertisement
weberc2

C overloading

Jul 3rd, 2014
2,553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.99 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. ///////////////////////////////////////
  4. // Base
  5.  
  6. typedef struct _base
  7. {
  8.    char*(*GetName)(struct _base*);
  9.    char* name;
  10. } Base;
  11.  
  12. char* base_get_name(Base* base)
  13. {
  14.    return base->name;
  15. }
  16.  
  17. void base_init(Base* base, char* name)
  18. {
  19.    base->name = name;
  20.    base->GetName = &base_get_name;
  21. }
  22.  
  23. ///////////////////////////////////////
  24. // Derived
  25.  
  26. typedef struct
  27. {
  28.    Base Base;
  29. } Derived;
  30.  
  31. char* derived_get_name(Base* derived)
  32. {
  33.    return "derived";
  34. }
  35.  
  36. void derived_init(Derived* derived)
  37. {
  38.    derived->Base.name = "";
  39.    derived->Base.GetName = &derived_get_name;
  40. }
  41.  
  42. //////////////////////////////////////
  43. // Functions
  44.  
  45. void PrintName(Base* base)
  46. {
  47.    printf("%s\n", base->GetName(base));
  48. }
  49.  
  50. int main()
  51. {
  52.    Base b;
  53.    Base* bPtr = &b;
  54.    base_init(bPtr, "base");
  55.    PrintName(bPtr);
  56.  
  57.    Derived d;
  58.    Derived* dPtr = &d;
  59.    derived_init(dPtr);
  60.  
  61.    PrintName((Base*)(dPtr));
  62.  
  63.    return 0;  
  64. }
  65.  
  66. // output:
  67. // base
  68. // derived
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement