Texas Instruments TI89 Developer Guide - Page 1260
contains a pointer to frame A. Now a call to foosuper in B_foo calls the foo
UPC - 033317198566
View all Texas Instruments TI89 manuals
Add to My Manuals
Save this manual to your list of manuals |
Page 1260 highlights
1218 Appendix B: Global Variables - Apps OO_SuperFrame (continued) /* The C compiler complains about 0 length array for empty FRAMEs FRAME(C, &B, 0, 0, 0) ENDFRAME */ const OO_Hdr C = /* hand-coded empty FRAME C */ { (pFrame)&B, 0, OO_RO | OO_SEQ, 0, 0 }; void A_foo(pFrame self) { /* implementation of A::foo */ } void B_foo(pFrame self) { /* implementation of B::foo */ Access_AMS_Global_Variables; pFrame super = OO_SuperFrame; /* Call inherited foo method */ foo(super); } void main(void) { foo((pFrame)&C); } Main calls method foo of frame C. Frame C has no implementation of foo, so inherited method foo from frame B (routine B_foo) actually gets called. B_foo wants to call the inherited foo method of frame self. If it calls the parent foo method of frame self, it will, in fact, be calling itself recursively - remember self points to frame C, the parent of which is frame B. OO_SuperFrame conveniently contains a pointer to the parent frame of the frame where the latest method address was retrieved. Method foo was retrieved from frame B, so OO_SuperFrame contains a pointer to frame A. Now a call to foo(super) in B_foo calls the foo method of frame A (routine A_foo). Note: OO_SuperFrame is a system-wide global variable. If you intend to use it in one of your method implementations, make an immediate copy into a local variable because subsequent method calls or attribute accesses will change its value. TI-89 / TI-92 Plus Developer Guide Not for Distribution Beta Version January 26, 2001