Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- ///////////////////////////////////////
- // Base
- typedef struct _base
- {
- char*(*GetName)(struct _base*);
- char* name;
- } Base;
- char* base_get_name(Base* base)
- {
- return base->name;
- }
- void base_init(Base* base, char* name)
- {
- base->name = name;
- base->GetName = &base_get_name;
- }
- ///////////////////////////////////////
- // Derived
- typedef struct
- {
- Base Base;
- } Derived;
- char* derived_get_name(Base* derived)
- {
- return "derived";
- }
- void derived_init(Derived* derived)
- {
- derived->Base.name = "";
- derived->Base.GetName = &derived_get_name;
- }
- //////////////////////////////////////
- // Functions
- void PrintName(Base* base)
- {
- printf("%s\n", base->GetName(base));
- }
- int main()
- {
- Base b;
- Base* bPtr = &b;
- base_init(bPtr, "base");
- PrintName(bPtr);
- Derived d;
- Derived* dPtr = &d;
- derived_init(dPtr);
- PrintName((Base*)(dPtr));
- return 0;
- }
- // output:
- // base
- // derived
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement