CSC/ECE 517 Fall 2010/ch2 5c gn: Difference between revisions
Jump to navigation
Jump to search
(Details of dynamic dispatch) |
|||
Line 5: | Line 5: | ||
=== How Dynamic Dispatch works === | === How Dynamic Dispatch works === | ||
=== Dynamic Dispatch working in Detail === | === Dynamic Dispatch working in Detail === | ||
class Cat | |||
{ | |||
public: | |||
void talk() | |||
{ | |||
cout << "Meow!!"; | |||
} | |||
}; | |||
class Dog | |||
{ | |||
public: | |||
void talk() | |||
{ | |||
cout << "Bark!!"; | |||
} | |||
}; | |||
struct Cat | |||
{ | |||
int __id__; // 0 | |||
char name[10]; | |||
}; | |||
struct Dog | |||
{ | |||
int __id__; // 1 | |||
char name[10]; | |||
}; | |||
void cat_talk() | |||
{ | |||
printf("meow!"); | |||
} | |||
void dog_talk() | |||
{ | |||
printf("Bark!!"); | |||
} | |||
void talk(void *object) | |||
{ | |||
int id = *(int *)object; | |||
vtable[id](); | |||
} | |||
void (*vtable[2]); | |||
vtable[0] = cat_talk; | |||
vtable[1] = dog_talk; | |||
Cat *c = new Cat(); | |||
Cat *c = malloc(sizeof(cat)); | |||
c->__id__ = 0; | |||
=== Performance Evaluation === | === Performance Evaluation === | ||
=== Does Dynamic Dispatching hurts in today's power packed Computers? === | === Does Dynamic Dispatching hurts in today's power packed Computers? === |
Revision as of 20:47, 25 October 2010
Dynamic Dispath
Introduction
Why we need Dynamic Dispatch
How Dynamic Dispatch works
Dynamic Dispatch working in Detail
class Cat { public: void talk() { cout << "Meow!!"; } }; class Dog { public: void talk() { cout << "Bark!!"; } }; struct Cat { int __id__; // 0 char name[10]; }; struct Dog { int __id__; // 1 char name[10]; }; void cat_talk() { printf("meow!"); } void dog_talk() { printf("Bark!!"); } void talk(void *object) { int id = *(int *)object; vtable[id](); } void (*vtable[2]); vtable[0] = cat_talk; vtable[1] = dog_talk; Cat *c = new Cat(); Cat *c = malloc(sizeof(cat)); c->__id__ = 0;