CSC/ECE 517 Fall 2010/ch5 5c ck: Difference between revisions
Line 32: | Line 32: | ||
==Performance== | ==Performance== | ||
"Calling a virtual function is roughly equivalent to calling a function through a pointer stored in an array" | According to [http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf Technical Report C++ Performance][4] "Calling a virtual function is roughly equivalent to calling a function through a pointer stored in an array" | ||
==Conclusion== | ==Conclusion== |
Revision as of 17:16, 30 October 2010
Introduction
Dynamic dispatch means there is a determination of which method to execute at run time, when a class and one of it's subclasses have the same method signature.
This occurs when a class is downcast to one of its super classes and a method is called on that super class object.
Generic Example
We have a set of objects that can be rendered to the display.
Each object implements the IRenderable interface as seen below:
Utilizing the ability of dynamic dispatch it is very simple to render a collection of IRenderable[] objects for the display:
IRenderable[] irCollection = {new Circle(0,0,.5), new Polygon(0,0,1,1,2,2,0,0)} foreach (IRenderable ir in irCollection) { ir.render(); }
Note: This example would be the same if IRenderable were a class or abstract class object.
Single and Multiple Dispatch
Single Dispatch
All Object Oriented languages use a dynamic dispatch process known as single dispatch.
In single dispatch only one object is accessed dynamically at run time.
The source object is the only one that is accessed at run time, all parameters are treated as static types.
Multiple Dispatch
A few Object Oriented languages use a more complete dynamic dispatch process known as multiple dispatch.
In multiple dispatch more than one or all objects are accessed dynamically at run time.
The source object is accessed at run time, and one or more parameters are dynamically accessed at run time.
Performance
According to Technical Report C++ Performance[4] "Calling a virtual function is roughly equivalent to calling a function through a pointer stored in an array"
Conclusion
References
[4] Technical Report C++ Performance ISO/IEC TR 18015:2006(E) 2006-02-15 (pg. 26)