剛剛我問了潘愛民老師這個(gè)問題,他的回答如下: ?
? 我曾經(jīng)用下面的類比來講述過這個(gè)問題,看是否有助于你的理解。 ?
? ?
? 假設(shè)有兩個(gè)二進(jìn)制結(jié)構(gòu)一樣的vtable ?
? class ? Vtable1{ ?
? virtual ? void ? __stdcall ? Method1(int, ? int) ? = ? 0; ?
? virtual ? void ? __stdcall ? Method2(int) ? = ? 0; ?
? }; ?
? class ? Vtable2{ ?
? virtual ? void ? __stdcall ? Operator1(int, ? int) ? = ? 0; ?
? virtual ? void ? __stdcall ? Operator2(int) ? = ? 0; ?
? }; ?
? ?
? 假設(shè)某段程序?qū)崿F(xiàn)了其中之一 ?
? class ? CMyObject ? : ? public ? Vtable1{ ?
? …… ?
? virtual ? void ? __stdcall ? Method1(int, ? int); ?
? virtual ? void ? __stdcall ? Method2(int); ?
? }; ?
? ?
? 客戶的用法 ?
? 實(shí)例化CMyObject ? : ?
? Vtable1 ? *p1 ? = ? CreateObject(...); ?
? 代碼片斷1: ?
? p1->Method1(a, ? b); ?
? 代碼片斷1: ?
? Vtable2 ? *p2 ? = ? (Vtable2 ? *)p1; ?
? p2->Operator1(a, ? b); ?
? ?
? ?
? 這兩段代碼調(diào)用的是同一個(gè)方法,這里的要點(diǎn)是“指針類型并不重要,vtable才決定了 ?
? 內(nèi)部方法的功能”。 ?
? ?
? ?
? 潘愛民??
>>>>>>>>>>NonDelegatingAddRef()"
trackback:ping="http://www.shnenglu.com/fwxjj/services/trackbacks/18315.aspx" />
-->