²é¿´: 245  |  »Ø¸´: 1
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

[½»Á÷] Óûã±àÀ´ÊµÏÖOOP

Óûã±àÀ´ÊµÏÖOOP
OOPºÍÃæÏò¹ý³Ì¶¼ÊDZà³ÌÖеÄ˼Ï룬ÓÃѧÊõһЩµÄ»°ÊÇparadigm¡£Ôø¾­ÓÐÈË˵¹ý£¬¼ÈÈ»cfrontÉú³ÉµÄÊÇC´úÂ룬ÄÇôÓÃC±¾ÉíÄËÖÁ»ã±à¶¼¿ÉÒÔʵÏÖOOP£¬Ö»ÊÇÌ«¶à¶«Î÷ÐèÒª×Ô¼ºÊÖ¹¤À´Íê³É¡£È·ÊµÊÇÕâÑùµÄ£¬ÃæÏò¹ý³ÌÔç¾ÍÓÃÔÚ»ã±àÉè¼ÆÖÐÁË£¬OOPÒ²Ôç¾ÍºÍ»ã±àÓÐÁ˽»»ãµã£¨95Äê֮ǰ£¬TASM¾ÍÒýÈëÁËOOPµÄ¸ÅÄ¡£Ö»ÊÇ»ã±àʵÏÖOOPÊÇûÓÐÐÎʽÉϵģ¬ÎÞ·¨ÌṩC++ÕâÑùµÄStrong-typedºÍÆäËû°²È«±£Ö¤£¨±ÈÈç´æÈ¡È¨ÏÞ£©¡£·â×°Ö»ÊÇÒ»ÖÖ¸ÅÄîÉϵģ¬×Ô¾õ×ñÊØµÄ¡£

OOPÓм¸¸ö¹Ø¼ü£¬¾ÝÎҵĴÖdzÀí½â¼´Îª£º·â×°ÐÔ£¬¼Ì³ÐÓë¶à̬¡£¾ßÌå±íÏÖ¾ÍÊǰÑÊý¾ÝºÍ²Ù×÷Êý¾ÝµÄº¯Êý·ÅÔÚÒ»Æð£¬Êý¾Ý·ÅÔÚ¶ÔÏóÖУ¬Ìṩ½Ó¿ÚʵÏÖ´æÈ¡¡£¼Ì³ÐÐÔʵÏÖÁËÓïÒå»òÕßʵÏֵļ̳У¬Í¬Ê±ÌåÏÖÔÚ¸ÅÄî²ã´ÎÓë´úÂëÖØÓÃÁ½¸ö·½Ãæ¡£¶à̬ÔòÊÇÀûÓÃÖ¸ÕëʵÏÖʹÓÃpointer»òreferenceÀ´ÊµÏÖͬһº¯ÊýÔÚ²»Í¬¼Ì³ÐÀàÖеĶà̬±íÏÖ¡£

OOPµÄ¶ÔÏóÄ£ÐÍÓкü¸ÖÖʵÏÖ·½Ê½£¬ÔÚ¡¶inside C++ object model¡·ÖÐÓм«ÆäÏ꾡µÄÐðÊö£º

1.Ö»°ÑÊý¾Ý·ÅÔÚ¶ÔÏóÖУ¬¶øÍ¨¹ýname mangling¼¼Êõ°Ñmember-functionÓëclass¹ØÁªÆðÀ´¡£
2.µ¥±íÄ£ÐÍ£¬°Ñmember functionµÄpointer·ÅÈëµ½µ¥¶ÀµÄÒ»¸ö±í¸ñ£¬°Ñ±í¸ñµÄÈë¿ÚµØÖ··ÅÈë¶ÔÏóÖУ¨Ò»¸öÀà¶ÔÓ¦Ò»¸ö±í¸ñ£©¡£ÕâÔÚC++ÖбíÏÖΪVtblÓëVptr£¬ÕâÖÖÄ£ÐÍʵÏÖÁËÔËÐÐʱµÄ¶¯Ì¬Áé»îÐÔ£¬ËäÈ»¶àÁËÁ½´Îdereference¡£
3.Ë«±íÄ£ÐÍ£¬°ÑÊý¾ÝÓ뺯Êý·ÖÁÐÔÚÁ½¸ö±í¸ñÖУ¬È»ºó°ÑÁ½¸ö±í¸ñµÄÈë¿ÚµØÖ·´æ·ÅÔÚ¶ÔÏóÖУ¬Ê¹µÃµ¥¸ö¶ÔÏóÓÐÁ˹̶¨µÄ´óС¡£
4.¼òµ¥Ä£ÐÍ£¬Õâ¸öÊÇ»ã±àʵ×öµÄʱºòÓõÄÄ£ÐÍ¡£¾ÍÊǶÔÏóÖм´±£´æÁËÊý¾ÝÒ²±£´æÁ˺¯ÊýµØÖ·¡£ÎÞÂÛÊÇTASM»¹ÊÇMASM£¬¶¼ÊÇÕâô×öµÄ¡£
´ÓЧÄÜÉÏÀ´Ëµ£¬C++µÄ×ö·¨ÊÇ×îÓŵġ£»ã±àʹÓõÚËÄÖÖÊÇÆÈ²»µÃÒÑ£¬ÊÇΪÁËʵÏֵļòµ¥ÐÔ¡£Ò»¶¨³Ì¶ÈÉÏÓë»ã±àµÄ¸ßЧµÄ¾«ÉñÎ¥±³¡£

TASMÒѾ­²»³£ÓÃÁË£¬ÆäOOPµÄ×ö·¨ºÍMASMµÄ×ö·¨Ò²ÊÇÀàËÆµÄ¡£ÕâÀïÖ÷ÒªÌÖÂÛMASMµÄOOP×ö·¨¡£×÷ÕßÊÇNaN ºÍThomas Bleeker¡£ÆäʵÏֵİ취ÊÇÓú궨ÒåÀ´´ïµ½±¾À´Ó¦¸ÃÊDZàÒëÆ÷×öµÄÄ»ºó¹¤×÷¡£ÆäÖеĺêµÄ¼¼Çɺܶࡣµ«ÊÇ×îÖÕµÄʹÓÃÊÇͦ¼òµ¥µÄ¡£ºêµÄ¶¨Òå·ÅÔÚÒ»¸öOBJECTS.INCµÄÎļþÖУ¬asmÎļþ°üº¬Õâ¸öinc¾ÍÄÜʹÓÃÕâ¸öobject model¡£

ËäÈ»ºê×öµÃºÜ¾«ÇÉ£¬µ«ÊDZϾ¹MASMȱÉÙÖ§³ÖOOPµÄÓï·¨ÌØÐÔ£¬ÔÚʹÓÃµÄºÜ¶à·½Ãæ¶¼ÓÐÂé·³»òÕßÔÚ¿Õ¼äʱ¼äÉÏÓдú¼Û¡£±ÈÈ縲¸Ç»ùÀàµÄÐ麯Êý±ØÐëÿ´ÎÊÖ¹¤µÄÍê³É¡£Ò²¾ÍÊǼ̳еIJã´ÎÖÐËùÓи¸ÀàÒÔÉϵı»¸²¸ÇµÄÐ麯Êý¶¼ÐèÒªÔÚ×ÓÀàÖÐÊÖ¹¤Íê³É¡£ËäÈ»ÊÇÓÐÕâÑùÄÇÑùµÄȱµã£¬µ«ÊÇOOP»¹ÊǸø»ã±à´øÀ´Á˲»Éٺô¦¡£±ÈÈ磺

1.»ã±à¸üºÃµÄºÍCOM£¬C++ÕâÑùµÄÃæÏò¶ÔÏóÁìÓòµÄ¶«Î÷»¥¶¯¡£ÒѾ­ÓÐÓûã±à£«OOPµ÷ÓÃcomµÄÀý×Ó¡£Èç¹ûÓûã±à£«OOPÀ´Ð´com½«¿ÉÒÔ²úÉúÊʺϸßËٶȺÍС³ß´çµÄ×é¼þ¡£
2.À©´óÁË»ã±àÄܹ»½â¾öµÄÎÊÌⷶΧ£¬Ê¹µÃ»ã±à³ÌÐò¸ü¼ÓÈÝÒ×¹ÜÀíºÍºÏ×÷±àд¡£Õâ¸öobject modelµÄ×÷Õß¾ÍÓûã±à£«OOPдÁËÒ»¸ö»ùÓÚÉñ¾­ÍøÂçµÄÊÖд×Öĸʶ±ðµÄ³ÌÐò£¬²»µ½200k£¨ÆäÖд󲿷ÖÊÇͼÏóÎļþÕ¼ÓõĿռ䣩¡£

--------------------------------------------------------------------------------

ʹÓÃ
¶¨ÒåÒ»¸ö»ùÀàµÄ°ì·¨¡£

;×¼±¸ºÃº¯ÊýÔ­ÐÍ
   Shape_Init    PROTO  WORD
   Shap_destructorPto    TYPEDEF  PROTO  WORD
   Shap_getAreaPto    TYPEDEF  PROTO  WORD
   Shap_setColorPto    TYPEDEF  PROTO  WORD, WORD
--------------------------------------------------------------------------------
;ʵ¼ÊÉϾÍÊÇSTRUCµÄ¶¨Òå
  CLASS Shape, Shap
      CMETHOD destructor
      CMETHOD getArea
      CMETHOD setColor
      Color     dd    ?
   Shape ENDS
--------------------------------------------------------------------------------
.data

;³õʼ»¯
   BEGIN_INIT
      dd offset Shap_destructor_Funct
      dd offset Shap_getArea_Funct
      dd offset Shap_setColor_Funct
      dd NULL
   END_INIT
--------------------------------------------------------------------------------
.code

Shape_Init  PROC uses edi esi lpTHISWORD
;ʵ¼Êµ÷Óóõʼ»¯
   SET_CLASS Shape
;°Ñedi assmue ΪShapeÀàÐÍ
   SetObject edi, Shape
;¶îÍⶨÒåµÄDPrintºê£¬²»ÓÃϸ¾¿
     DPrint "Shape Created (Code in Shape.asm)"
;È¡Ïûassmue
   ReleaseObject edi
   ret
Shape_Init ENDP

Shap_destructor_Funct  PROC uses edi lpTHISWORD
   SetObject edi, Shape

     DPrint "Shape Destroyed (Code in Shape.asm)"
     
   ReleaseObject edi
   ret
Shap_destructor_Funct  ENDP

Shap_setColor_Funct  PROC uses edi lpTHISWORD, DATAWORD
   SetObject edi, Shape

   mov eax, DATA
   mov [edi].Color, eax
     
     DPrint "Shape Color Set!! (Code in Shape.asm)"
     
   ReleaseObject edi
   ret
Shap_setColor_Funct  ENDP

Shap_getArea_Funct  PROC uses edi lpTHISWORD
   SetObject edi, Shape

     DPrint " "
     DPrint "   SuperClassing!!!!! This allows code re-use if you use this method!!"
     DPrint "   Shape's getArea Method! (Code in Shape.asm)"
     
     mov eax, [edi].Color
     DPrint "   Called from Shape.getArea, (Code in Shape.asm)"
     DPrintValH eax, "   This objects color val is"
     DPrint " "
     
   ReleaseObject edi
   ret
Shap_getArea_Funct  ENDP

¼Ì³ÐÕâ¸öÀà

include Shape.asm  ; Inherited class info file
   Circle_Init    PROTO  WORD
   Circ_destructorPto    TYPEDEF  PROTO  WORD
   Circ_setRadiusPto    TYPEDEF  PROTO  WORD, WORD

   Circ_getAreaPto  TYPEDEF PROTO WORD
   --------------------------------------------------------------------------------
   CLASS Circle, Circ
;¼Ì³ÐÔ­ÓеÄÊý¾ÝºÍº¯Êý
      Shape     <>         ; Inherited Class
      CMETHOD setRadius
      Radius     dd    ?
   Circle ENDS
--------------------------------------------------------------------------------
.data

   BEGIN_INIT
      dd offset Circ_destructor_Funct
      dd offset Circ_setRadius_Funct
      dd NULL
   END_INIT
--------------------------------------------------------------------------------
.code

Circle_Init  PROC uses edi esi lpTHISWORD
;³õʼ»¯²¢ÊµÏּ̳Ð
   SET_CLASS Circle INHERITS Shape
   SetObject edi, Circle
;Ï൱ÓÚ¹¹Ô캯ÊýÖØÖÃvptr
     OVERRIDE getArea, CirleAreaProc

     DPrint "Circle Created (Code in Circle.asm)"

   ReleaseObject edi
   ret
Circle_Init ENDP

Circ_destructor_Funct  PROC uses edi lpTHISWORD
   SetObject edi, Circle

     DPrint "Circle Destroyed (Code in Circle.asm)"
;ʵÏÖÁË»ùÀຯÊýµÄµ÷Óà    
     SUPER destructor

   ReleaseObject edi
   ret
Circ_destructor_Funct  ENDP

Circ_setRadius_Funct  PROC uses edi lpTHISWORD, DATAWORD
   SetObject edi, Circle

   mov eax, DATA
   mov [edi].Radius, eax
   
     DPrint "Circle Radius Set (Code in Circle.asm)"

   ReleaseObject edi
   ret
Circ_setRadius_Funct  ENDP

CirleAreaProc PROC uses edi lpTHISWORD
  LOCAL TEMP
  SetObject edi, Circle
  
  SUPER getArea
  
  
  mov eax, [edi].Radius
  mov TEMP, eax
  
  finit
  fild TEMP
  fimul TEMP
  fldpi
  fmul
  fistp TEMP
  
  mov eax, TEMP
  DPrint "Circle Area (integer Rounded) (Code in Circle.asm)"
  
  ReleaseObject edi
  ret
   
CirleAreaProc ENDP

¸ù¾ÝÀàÀ´Éú³É¶ÔÏ󣬲¢Ê¹ÓÃ

DEBUGC equ 1
.586
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib

include Dmacros.inc
include Objects.inc
include Circle.asm

.data

.data?

hCircle dd ?

.code
start:

  ; Recuse all inherited constructors.. and do all inits
  DPrint " "
  DPrint " >>> main.asm <<< [ mov hCircle, $NEW( Circle ) ]"
  mov hCircle, $NEW( Circle )

  DPrint " "
  DPrint " >>> main.asm <<< [ METHOD hCircle, Circle, setColor, 7 ]"
  METHOD hCircle, Circle, setColor, 7
  
  DPrint " "
  DPrint " >>> main.asm <<< [ METHOD hCircle, Circle, setRadius, 2 ]"
  METHOD hCircle, Circle, setRadius, 2  
  
  DPrint " "
  DPrint " ------------ TEST POLYMORPHIC METHOD hCircle.getArea ------------- "
  DPrint " "
  DPrint " >>> main.asm <<< [ DPrintValD $EAX( hCircle, Circle, getArea ) , 'Area of hCircle' ]"
  DPrintValD $EAX( hCircle, Circle, getArea ) , "Area of hCircle"
  DPrint " "

  DPrint " ------------ TEST POLYMORPHIC METHOD hCircle.getArea ------------- "
  DPrint " "
  DPrint " >>> main.asm <<< [   DPrintValD $EAX( hCircle, Shape, getArea ) , 'Area of hCircle' ]"
  DPrint " Typing calling this Ojbect Instance as a SHAPE type only! This is the true value"
  DPrint " of Polymorphism.  We dont need to know its a Circle object in order to get the"
  DPrint " proper area of this instance object, that is inherited from Shape."
  DPrint " "
  DPrintValD $EAX( hCircle, Shape, getArea ) , "Area of hCircle"
  DPrint " "
  
  
  DPrint " "
  DPrint " >>> main.asm <<< [ DESTROY hCircle ]"
  DESTROY hCircle
  DPrint " "
  DPrint " "
  DPrint " NOTE: superclassing here, as each destructor call's the SUPER destructor"
  DPrint "       To properly clean up after each class.  To see SUPER classing in"
  DPrint "       in the Polymorphic getArea Function.  Uncomment the SUPER code in"
  DPrint "       CircleAreaProc, and re-compile"


     call ExitProcess
end start

¿´ÆðÀ´Í¦ÔÓÂҵ쬯äʵ»¹ÊÇͦÕûÆëµÄ¡£ÓÉËIJ¿·Ö×é³É¡£

µÚÒ»²¿·ÖÊǸ÷¸ö³ÉÔ±º¯ÊýµÄÉùÃ÷¡£ÌرðµÄÒ»¶¨ÒªÓÐÒ»¸ö¡°ÀàÃû_Init¡±µÄº¯Êý£¬Õâ¸öº¯ÊýÊÇÀàµÄ¹¹Ô캯Êý£¬Ãû×Ö¾ÍÊÇÕâ¸ö£¬²»Äܸ͝¡£
µÚ¶þ²¿·ÖÊÇÓÉclassÒýµ¼µÄº¯ÊýÉùÃ÷£¬Æäʵ¾ÍÊǶ¨Ò»¸öSTRUC£¬Ò²¾ÍÊǽṹÌå¡£ÆäÖÐͨ¹ýÄÚº¬»ùÀàµÄ¶¨ÒåÀ´´ïµ½½á¹¹Éϵļ̳С££¨Êý¾ÝÉϵļ̳ÐÔÚ¹¹Ô캯ÊýÖе÷ÓÃSET_CLASSÍê³É£©¡£
µÚÈý²¿·ÖÊÇ·ÅÔÚ.dataÖеijõʼ»¯ÐòÁУ¨BEGIN_INIT,END_INIT£©¡£Ï൱ÓÚC++µÄvtbl£¬µ«ÓÖ°üÀ¨Á˶ÔÏóµÄÊý¾Ý³ÉÔ±µÄ³õʼֵ¡£
µÚËIJ¿·ÖÊǸ÷¸ö³ÉÔ±º¯ÊýµÄʵÏÖ¡£ÌرðµÄÊǹ¹Ô캯ÊýÖÐÒªµ÷ÓõÄSET_CLASSºÍÓпÉÄܵ÷ÓõÄOVERRIDE£¬Íê³ÉÁËÊý¾ÝµÄ¼Ì³ÐºÍÐ麯ÊýµÄ¸Äд¡£
ʵ¼ÊʹÓÃÖвο¼Ò»Ð©ÒѾ­ÓеÄÀý×ӾͿÉÒÔÂùÊæ³©µÄʹÓÃÁË¡£È·Êµ¿ÉÒÔ´øÀ´ºÜ´óµÄ·½±ã¡£


--------------------------------------------------------------------------------

Ô­Àí
ËùÓеİÂÃØ¶¼ÔÚObject.incÖУ¬ÆäÖж¨ÒåÁËÈçϵĺê

; --=====================================================================================--
; MACRO LIST INDEX:
; --=====================================================================================--
;   NEWOBJECT       ´´½¨ÐµĶÔÏóʵÌå
;   METHOD          µ÷ÓÃʵÌåÖеĺ¯Êý
;   DESTROY         destroy ¶ÔÏó (MUST)
;   SetObject       °Ñ¼Ä´æÆ÷ÖеÄÖ¸Õë¡°ÈÏΪ¡±Ä³ÖֽṹµÄÖ¸Õë
;   ReleaseObject   È¡ÏûÕâÖÖ¡°ÈÏΪ¡±
;   OVERRIDE        ¸Äд±í¸ñÖк¯ÊýµÄµØÖ·£¬ÊµÏÖ¶à̬
;   SET_CLASS       ʵÏÖ³õʼ»¯£¬ÈçÓбØÒªÊµÏּ̳Р(MUST)
;   SUPER           µ÷ÓûùÀຯÊýµÄÖ§³Ö
;
;   $EAX()             Accelerated METHOD, returns in eax
;   $EBX()             Accelerated METHOD, returns in ebx
;   $ESI()             Accelerated METHOD, returns in esi
;   $EDI()             Accelerated METHOD, returns in edi
;   $NEW()             Accelerated NEWOBJECT, returns in eax
;   $SUPER()           Accelerated SUPER, returns in eax
;   $DESTROY()         Accelerated DESTROY, returns in eax
;   $invoke()          Accelerated invoke, returns in eax
;
;   BEGIN_INIT      ÔÚÊý¾Ý¶ÎÖбê¼Ç³õʼ»¯µÄÐÅÏ¢ (MUST)
;   END_INIT        ±íÃ÷±ê¼Ç½áÊø (MUST)
;
;   CLASS           ¼´ÎªSTRUCT (MUST)
;   SET_INTERFACE   To Declair Abbreviated Interface and Abv Name (MUST)
;   CMETHOD         ÉùÃ÷Àà»òÕß½Ó¿ÚÖеĺ¯Êý
;
; --=====================================================================================--

[ Last edited by »ÃÓ°ÎÞºÛ on 2006-10-17 at 09:02 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

ºêµÄÊýÁ¿Ò²²»ÊǺܶ࣬µ«ÊǵÄÈ·Íê³ÉÁ˱àÒëÆ÷ΪÎÒÃÇÍê³ÉµÄÄ»ºó¹¤×÷¡£ÎÒÖ»ÁгöºêÕ¹¿ªÇ°ºóµÄ´úÂ룬²¢¼ÓÒÔ½âÊÍ¡£¶ÔÓÚºêµÄ¾ßÌåʵÏÖÓÉÓÚÇ£Éæµ½Öî¶àÓï·¨ºÍ¼¼ÇÉ£¬²»·½±ãÏêϸ½²½â£¨ÆäʵÎÒÒ²ÊǸոÕͨ¹ý²éÊֲᣬһµãµã¶Á¶®µÄ£©¡£

ÏÈÀ´¿´CLASS°É£¬Õâ¸öÊÇÏ뵱ȻµÄÈë¿Ú²¿·Ö¡£

ÆäʵºÜ¼òµ¥¾ÍÊǰÑClass»»³ÉSTRUC¡£

CLASS Shape, Shap
   CMETHOD destructor
   CMETHOD getArea
   CMETHOD setColor
   Color     dd    ?
Shape ENDS

Ìæ»»Ö®ºó¾ÍÊÇ

Shape STRUC
   CMETHOD destructor
   CMETHOD getArea
   CMETHOD setColor
   Color     dd    ?
Shape ENDS

ºÜ×ÔÈ»£¬¿´¿´CMETHODÊÇÔõô×öµÄ

CMETHOD destructor

¾Í±ä³ÉÁË

destructor PTR Circ_destructorPto ?

Õû¸ö¾ÍÕ¹¿ªÎª£º

Shape STRUC
  destructor PTR Circ_destructorPto ?
  getArea PTR Circ_getAreaPto ?
  setColor PTR Circ_setColor ?
  Color     dd    ?
Shape ENDS

^_^£¬½á¹¹ÌåÖоÍÊǺ¯ÊýÖ¸ÕëºÍÊý¾ÝÂȻºó£¬ÏßË÷¾Í¶ÏÁË¡£¹âÕâÑù¶¨ÒåÒ»¸ö½á¹¹Êǿ϶¨²»Ðеġ£ÄÇô¾Í´Ó¶ÔÏóµÄ²úÉú¿ªÊ¼°É£¬newÊÇÔõô×öµÄ¡£

NEWOBJECT Circle

-->

invoke GetProcessHeap
invoke HeapAlloc, eax, NULL, SIZEOF Circle
push   eax
invoke Circle_Init, eax
pop    eax

ÕâÀïÏÔʾÁËÒ»¸öºÜÃ÷ÏÔµÄȱÏÝ£¬¾ÍÊÇÒ»¶¨ÒªÔÚwin32ÏÂʹÓã¬ÒòΪwin32apiµÄʹÓ᣿ÉÒÔ°ÑapiÌæ»»³ÉÒ»¸öÍⲿµÄº¯Êý¡£È»ºó·ÅÔÚ²»Í¬µÄƽ̨ÉÏʹÓÃÖ»Òª¸Ä±äÕâ¸ö¶¯Ì¬·ÖÅäÄÚ´æµÄº¯Êý¾Í¿ÉÒÔÁË¡£

²úÉúµÄ´úÂëºÜÆÓʵ£¬¾ÍÊÇ·ÖÅäÄڴ棬Ȼºóµ÷ÓöÔÏóµÄ¹¹Ô캯Êý¡£ÕâÀï£¬Ç¿ÖÆµÄÒªÇóÀàµÄ¹¹Ô캯ÊýÒªÒÔ¡°ÀàÃû_Init¡±µÄÐÎʽ¡£ËäÈ»²»ÊÇʲô´óµÄÏÞÖÆ£¬µ«ÊÇÒ²²»ÊǺÜˬ¡£ÕâÑù×öÒ²ÊÇÓеÀÀíµÄ£¬Í¨¹ýÔÚ±àдÉ϶ԽÓÉÏÃû×Ö¿ÉÒÔ±ÜÃâÓÃÖ¸ÕëÕâÑùµÄ¶«Î÷À´ÊµÏÖÁé»îÐÔËù´øÀ´µÄoverhead£¬ÏÂÃæ¿ÉÒÔ¿´µ½Îö¹¹º¯ÊýÓÃÁËÖ¸ÕëµÄÐÎʽ£¬ÕâÊÇÒòΪÕâÀïĬÈÏÁËvirtual desturctor¡£

ºÃ£¬ÏÂÃæÇ°½øµ½¹¹Ô캯Êý£¬ÎÒÃÇ¿´¹¹Ô캯ÊýÊÇÔõôдµÄ£º

Shape_Init  PROC uses edi esi lpTHISWORD
   SET_CLASS Shape
   SetObject edi, Shape

     DPrint "Shape Created (Code in Shape.asm)"

   ReleaseObject edi
   ret
Shape_Init ENDP

lpTHISÓ¦¸Ã²»»áİÉú£¬¾ÍÊÇÖ¸Ïò¶ÔÏóµÄÖ¸Õë¡£ÕâÀïÒ»¸ö¶ÔÏóÒ²¾ÍÊÇÒ»¸östurctÀ²¡£µÚÒ»ÐоÍÊǹؼüËùÔÚ£¬SET_CLASSÊÇ×îÂé·³ºÍ¸»Óм¼ÇɵÄÒ»¸öºê¡£ÎÒÃÇÀ´¿´¿´ÊÇÔõô×öµÄ

SET_CLASS Shape

-->

push    esi
push    edi
cld   
mov    esi, offset @InitValLabel
mov    edi, lpTHIS
mov    ecx, @InitValSizeLabel
shr    ecx, 2
rep    movsd
mov    ecx, @InitValSizeLabel
and    ecx, 3
rep    movsb
pop    edi
pop    esi

pushºÍpopÊÇºÜÆÕͨµÄ±£´æÏÖ³¡µÄ×ö·¨¡£¶ømov esi, offset @InitValLabelÔòÊǺͺóÃæµÄBEGIN_INITÓйء£offset @InitValLabelÒ²¾ÍÊÇBEGIN_INITËù±ê¼ÇµÄµØÖ·¡£ÕâÒ»¶Î³ÌÐòÆäʵûÓÐ×öÊ²Ã´ÌØ±ðµÄÊÂÇé¡£Ò²¾ÍÊǰÑBEGIN_INITºÍEND_INITÖ®¼äµÄ³õʼ»¯µÄÊý¾Ý¸³¸ø¸Õ¸Õnew³öÀ´µÄ¶ÔÏó¡£lpTHIS¾ÍÊÇÕâ¸ö¶ÔÏóµÄµØÖ·¡£ÓÉÓÚSET_CLASS×ÜÊǼٶ¨ÄãÔÚ¹¹Ô캯ÊýÖе÷ÓÃËü£¬ËùÒÔlpTHISµ±È»ÊÇ´æÔڵģ¨×÷Ϊ¹¹Ô캯ÊýµÄ²ÎÊý£©¡£cld, rep movvsd µÈ¶¼ÊÇ»ã±àµÄ¿ìËÙ°áÒÆÊý¾ÝµÄ¼¼ÇÉ¡£²éÒ»ÏÂÊÖ²á¾ÍÖªµÀÊǸÉʲôµÄÁË¡£Ò²¾ÍÊÇÒ»¿ªÊ¼¾¡Á¿Ò»¸ödwordÒ»¸ödwordµÄ°áÒÆ£¬È»ºó¾ÍÒ»¸öbyteÒ»¸öbyteµÄÒÆ£¬Ö±µ½È«²¿¶¼°á¹ýÈ¥ÁË¡£

Èç¹û´øÉÏÁ˼̳У¬ÔòÒªÂé·³Ðí¶à

SET_CLASS Circle INHERITS Shape

-->

push    esi
push    edi
cld
mov    edi, lpTHIS
mov    esi, offset @InitValLabel

mov     eax, [esi]
mov     [edi], eax

add     esi, 4     
add     edi, Inher
mov    ecx, (@InitValSizeLabel - 4)
shr    ecx, 2
rep    movsd
mov    ecx, (@InitValSizeLabel - 4)
and    ecx, 3
rep    movsb
pop    edi
pop    esi

ÓÉÓڼ̳ÐÁË£¬ËùÒÔÒªÖØÖÃÎö¹¹º¯Êý¡£mov eax, [esi]ºÍmov [edi], eax×öÁËÕâÑùµÄ¹¤×÷¡£¶øÓÉÓÚÎö¹¹º¯ÊýµÄµØÖ·ÒѾ­¸Ä±äÁË£¬ËùÒÔÖ»ÐèÒªÒ²Ö»Äܼ̳кóÃæµÄÊý¾Ý³ÉÔ±°üÀ¨Ð麯ÊýµÄÖ¸Õë

½ÓÏÂÀ´ÊǶÔÏóµÄdestroy

DESTROY hCircle

-->

mov eax, hCircle
push eax
call dword ptr [hCircle]
         
push eax
invoke GetProcessHeap
invoke HeapFree, eax, NULL, hCircle
pop eax

ÓÉÓÚÎö¹¹º¯ÊýµÄµØÖ·ÊǶÔÏ󣨽ṹÌ壩µÄµÚÒ»¸ö³ÉÔ±£¬ËùÒÔcall¾ÍÊǵ÷ÓÃÎö¹¹º¯Êý¡£µ÷ÓÃÁËÖ®ºó¾ÍÓÃwin32api°ÑÉêÇëµÄÄÚ´æÊͷŵô

½ÓÏÂÀ´ÊÇÎö¹¹º¯Êý

Circ_destructor_Funct  PROC uses edi lpTHISWORD
   SetObject edi, Circle

     DPrint "Circle Destroyed (Code in Circle.asm)"
     
     SUPER destructor

   ReleaseObject edi
   ret
Circ_destructor_Funct  ENDP

Õâ¸öÊÇshapeµÄ¼Ì³ÐÀàcircleµÄÎö¹¹º¯Êý¡£ÀïÃæÓÐÒ»¸öSUPER£¬ÊµÏÖÁ˵÷ÓûùÀàÖеĺ¯Êý¡£ÎÒÃÇÀ´¼ÌÐø¿´ËüµÄʵÏÖ¡£

SUPER destructor

-->

invoke Circ_destructorPto  PTR [ (INHER_initdata+INHER.MethodName) ], lpTHIS

Circ_destructorPtoÖ¸¶¨Õâ¸öµØÖ·µÄÀàÐÍÊÇÒ»¸öʲôÑùµÄº¯Êý¡£INHERÊǺêÄÚ²¿µÄÒ»¸öÈ«¾ÖµÄ¶«Î÷£¬±íʾ¸ÃÀàµÄ»ùÀàÃû³Æ¡£INHER_initdata+INHER.MethodNameµÄ½á¹¹¾ÍÊÇÕâ¸öÀàÔÚ»ùÀàÖеÄʵ¼ÊµØÖ·¡£

ʣϵľÍÊÇʵ¼ÊµÄʹÓöÔÏóÖеĺ¯ÊýÁË£¨ÄãÊÇ¡°ÎÞȨ¡±²Ù×÷¶ÔÏóÖеÄÊý¾ÝµÄ£¬ËäÈ»ÊǸÅÄîÉϵġ£Êµ¼ÊÉÏÄã¿ÉÒÔËÁÒâµÄÆÆ»µÕâÀïÌåÏÖµÄOOP˼Ïë¡£ÒòΪ»ã±à²»ÌṩÕâÑùµÄ±£»¤£©¡£

METHOD hCircle, Shape, getArea

-->

mov edx, hCircle
invoke (Shape PTR [edx]).getArea, edx

ÊÕ»ñµÄ¼¾½ÚÁË¡£ÕâÒ»¾äÌåÏÖÁ˶à̬µÄ˼Ïë¡£hCircleÖ¸ÏòµÄÊÇÒ»¸öCircleÀàµÄ¶ÔÏ󣬵«Êǵ÷ÓõÄʱºò½âÊÍΪShapeÀà¡£×Ô¼ºÈ¥Àí½â°É¡£ÄÄÀïÌåÏÖÁ˶à̬¡£


--------------------------------------------------------------------------------

ÎҵĿ´·¨
´ÓÈ«¾ÖÀ´¿´Õâ¸ö¶ÔÏóÄ£ÐÍ£¬ÎÒÃÇ¿ÉÒÔ·¢ÏÖÊÇÕâÑùµÄ¡£

¶ÔÏóÊý¾ÝºÍÐ麯ÊýÖ¸Õë·ÅÔÚͬһ¸ö±í¸ñÖÐ
ËùÓеĺ¯Êý¶¼ÊÇÐéµÄ
¼Ì³ÐÀà¸Äд»ùÀàµÄÐ麯ÊýÐèÒªÔÚ³õʼ»¯Êý¾ÝÖ®ºóÊÖ¹¤Íê³É£¨¹¹Ô캯ÊýÖУ©
½öÌṩ¶ÔÉÏÒ»²ã»ùÀàÖб»¸ÄдµÄÐ麯ÊýµÄ·ÃÎÊ
ÄÚ´æµÄ·ÖÅäºÍÊÍ·ÅʹÓÃwin32api
OOPµÄÈý¸öÌØÐÔµÄÖ§³Ö£¬ÈçÏÂ

·â×°ÐÔ£º²¢Ã»ÓÐÌṩ¶ÔÓÚÆäÖÐÊý¾ÝµÄÌØ±ð±£»¤£¨Ã»ÓÐPrivate£©¡£Êý¾ÝºÍº¯ÊýÖ¸ÕëÖÃÓÚͬһ¸ö½á¹¹ÌåÖгÉΪһ¸ö¶ÔÏó¡£·ÃÎÊÊý¾Ýͨ¹ýÌṩµÄ½Ó¿ÚÍêÈ«¿¿×Ô¾õ¡£
¼Ì³Ð£ºÍ¨¹ý½á¹¹Ì嶨ÒåµÄǶÌ×£¨¶¨ÒåÖаüº¬ÒѾ­¶¨ÒåµÄ½á¹¹Ì壩£¬Íê³É½á¹¹Éϵļ̳С£Í¨¹ýSET_CLASSÍê³ÉÊý¾ÝÒâÒåÉϵļ̳С£ËùÓеļ̳ж¼ÊÇPublicµÄ¡£
¶à̬£º¶à̬µÄÏÁÒåÀí½âÊǶÔÓÚͬһ¸öº¯ÊýµÄµ÷Óý«Óв»Í¬µÄÐÐΪ¡£ÎÒÃÇͨ¹ýÒÔϱȽϹ۲죬ΪʲôÕâ¸ö¶ÔÏóÄ£ÐÍÖ§³ÖÁ˶à̬£¨ÒòΪËüÖ§³ÖÁËÅÉÉúÀà¶ÔÓÚ»ùÀຯÊýµÄ¸Äд£©¡£
class Shape
{
   virtual float getArea();
   ¡­¡­
};
class Cicle: public Shape
{
   float getArea();
   ¡­¡­
};

µ±Äãͨ¹ý¶ÔÏóÖ¸Õëµ÷ÓÃÒ»¸ö¶ÔÏóÖеÄÐ麯ÊýµÄʱºò¡£ÆäʵÄãÔÚ±àÒëµÄʱºòÒѾ­Ö¸¶¨Á˸ÃÖ¸ÕëµÄÀàÐÍ¡£±ÈÈ磺

float getArea(Shape* shp)
{
   return shp->getArea();
}

ËùÒÔ£¬±àÒëÆ÷¿ÉÒÔͨ¹ý²éѯ±àÒëʱµÄÐÅÏ¢À´È·¶¨ÄãËùµ÷Óõĺ¯ÊýÔÚvtblÖеÄË÷ÒýλÖá£È»ºóÕâ¸öµ÷Óþͻᱻһ¸ö²éѯvtbl£¬È»ºócallËù´úÌæ¡£¶øÔËÐеÄʱºò£¬´«À´µÄÖ¸Õëshp²¢²»Ò»¶¨¾ÍÊÇShapeÀàÐÍ£¬¶øÊÇËûµÄ¼Ì³ÐÀàÐÍ¡£ÕâÑùÁ½¸öÀàµÄvtblÄÚÈÝ¿ÉÄܲ»Ò»Ñù£¨ÅÉÉúÀà¸ÄдÁËÆäÖеÄijЩslotµÄµØÖ·£©¡£ËùÒÔ£¬ÕâÑù¾Í¿ÉÒÔʵÏÖÔÚ²»ÖªµÀÅÉÉúÀàÊÇʲôµÄÇé¿öϵ÷ÓÃÅÉÉúÀàµÄº¯Êý¡£°ÂÃØ¾ÍÔÚÓÚÅÉÉúÀàºÍ»ùÀà¶¼°Ñ¸÷×ÔµÄʵÏÖ°æ±¾·ÅÔÚÁËvtblµÄÏàͬλÖᣱàÒëÆÚÈ·¶¨ÁËλÖã¬ÔËÐÐʱȷ¶¨Á˸ÃλÖõÄÄÚÈÝ¡£

¶øÕâ¸ö»ã±à°æµÄobject modelÄØ£¿Æäʵ²î²»¶à¡£mov edx, hCircleºÍ invoke (Shape PTR [edx]).getArea, edx¾ÍÊÇÒ»¸ö¶à̬µÄµ÷Óá£hCircleʵ¼ÊÖ¸ÏòÒ»¸öCircleÀàÐ͵ĶÔÏó£¨ÔÚÕâÀï¶ÔÏó¼´ÓÐÊý¾ÝÓֳе£ÁËvtblµÄÈÎÎñ£©¡£¶øµ÷ÓõÄʱºòÉè¼ÆÊǰÑÕâ¸öÖ¸Õë×÷ΪShapeÀàÐÔ½âÊ͵ġ£Ò²¾ÍÊǰ´ÕÕshapeÀàÐÍÖÐgetAreaËùÔÚµÄindexÀ´µ÷Óá£ÏàͬµÄindexË÷Òýµ½²»Í¬µÄº¯Êý£¬¶à̬¾Í²úÉúÁË¡£


--------------------------------------------------------------------------------

¿ÉÄܵĸĽø
¹ØÓÚÐ麯Êý

Æäʵ˵ʵ»°£¬Õâ¸ö¶ÔÏóģʽ×öµÃʵÔÚÊǺܲ»´í£¬½«ºêµÄ¹¦ÄÜ·¢»Óµ½Á˼«Ö¡£²»¹ýËüÇ¿ÖÆµÄÒªÇóËùÓеÄÀà¶¼ÓÐÒ»¸övirtual destructorºÍËùÓеĺ¯Êý¶¼ÊÇvirtual¡£ÔÚºêµÄÄÜÁ¦Ëù¼°µÄ·¶Î§ÄÚ£¬ÒѾ­½«¶¨ÒåºÍµ÷Óö¼×öµÃ¾¡¿ÉÄܵļòµ¥£¬Ê¹ÓÃÆðÀ´Ò²µÄÈ·ÓÐÉÍÐÄÔÃÄ¿µÄ¸Ð¾õ¡£²»¹ýÎÒ¾õµÃ²»Òª°ÑËùÓеĺ¯Êý¶¼·ÅÔÚ¶ÔÏóÖÐ(¼´Ç¿ÖÆÐÔµÄ×÷ΪÐ麯Êý£©£¬ÄÇÑù»áÔö¼ÓÒ»¶¨µÄ³É±¾¡£

C++°Ñ·ÇÐéµÄ³ÉÔ±º¯Êý¿´×÷ÊÇÆÕͨµÄº¯Êý£¬·ÅÔÚ¶ÔÏóÖ®Íâ¡£ÆäʵÎÒ¾õµÃÕâ¸ö¶ÔÏóÄ£ÐÍÒ²¿ÉÒÔ²ÉÓ᣶øÏÖÓеÄÇ¿ÖÆÐԵĽ«Ò»Ð©³ÉÔ±º¯ÊýÔ­ÐÍÃû³ÆÏÞ¶¨Îª¡°ÀàÐÍÃû_º¯ÊýÃûPto¡±£¬²»ÈçÌṩһ¸öºêÀ´Õâô×öºÃÁË¡£

ÎҵĽ¨Ò飬½«²¿·Öº¯Êý·ÅÈë¶ÔÏóÖУ¨¾ÍÊÇÓÃCMETHODÀ´ÉùÃ÷ÓÚÀàÖУ©¡£¶øÆäËûÔò²»·ÅÈ룬ֻÊÇдÔÚͬһ¸öÎļþÖС£È»ºóÓÃMETHODµ÷ÓöÔÏóµÄmember-functionʱ£¬Ëü»áÔÚ»ã±àʱ¾ö¶¨Õâ¸ömember-functionÊÇ·ñ´æÔÚÓÚÐ麯Êý±í£¨Ò²¾ÍÊǶÔÏó±¾Éí´æ·ÅµÄһϵÁк¯ÊýÖ¸Õ룩ÖС£Èç¹û²»ÊÇÔò°´ÕÕÆÕͨº¯ÊýµÄÒ»Ñùµ÷Óá£Èç¹ûÊÇÔò°´ÕÕÏÖÔÚÕâ¸öģʽµ÷Óá£

METHODÕâ¸öºêÒ²ÊDZàдµÃ³öÀ´µÄ¡£ÔÚSUPERÕâ¸öºêÖоÍÓмìÑé¸ÃmethodÊÇ·ñÔÚ»ùÀàÖеÚÒ»´Î³öÏÖ£¨¶øÇÒ»¹ÊµÏÖÁ˼ìÑéÊÇ·ñÊÇÉÏÒ»²ã¶ø²»ÊǶà²ã»ùÀàµÄ¼ìÑ飩¡£ÕâôMETHODÒ²¿ÉÒÔ¼ìÑéµ÷Óõķ½·¨ÊÇ·ñÔÚclassÖгöÏÖ¹ý£¬È»ºó·Ö±ðʹÓò»Í¬µÄº¯Êýµ÷Óð취¡£

¹ØÓÚSUPER

Õâ¸ömodelÖÐÖ»Äܵ÷ÓÃÉÏÒ»²ã£¨Ò²¾ÍÊǸ¸ÀàµÄ£©µÄ±»¸²¸ÇµÄº¯Êý£¬¶ÔÓÚÉÏÉÏÒ»²ãµÄ±»¸²¸ÇµÄº¯ÊýÔòÎÞ·¨SUPERÁË¡£ÆäÖеÄÕϰ­ÔÚÓÚÎÞ·¨ÖªµÀÄǸöº¯ÊýÊÇÔÚÄĸöÀàÐÍÖеÚÒ»´Î³öÏÖ¡£ÎÒÏëÈç¹ûÊÖ¹¤ÌṩÕâ¸öÀàÃû£¬Ôò¿ÉÒÔSUPERÈÎÒâ²ã´ÎµÄ±»¸²¸ÇÁ˵ĺ¯Êý¡£ÏñÕâÑù£º

SUPER getArea

SUPER getArea, Shape

ûÓÐÌṩ¾ßÌåµÄÀàÃû£¬ÔòÈÏΪÊÇSUPERÉÏÒ»²ãµÄ£¬·ñÔòʹÓþßÌåµÄÀàÃûÀ´SUPER¡£SUPERµÄ°ÂÃØÒ²¾ÍÊDzéѯ·ÅÔÚ.data¶ÎµÄ¡°ÀàÐÍÃû_initdata¡±ÖÐÊý¾ÝÀ´´ïµ½¡°»Ö¸´¡±±»¸ÄдµÄº¯ÊýµÄ¹¦ÄÜ¡£

Ëæ±ã½²Ò»¾ä£¬TASMÖеÄTABLEÈ´¿ÉÒÔÃÖ²¹OVERRIDEµÄȱÏÝ£¬ÊÇÒ»ÖÖ¸üºÃµÄSTRUC¡£²»¹ýÄÇÊÇBorland¼ÓÇ¿Óï·¨µÄ½á¹û¡£ÎÞÂÛÈçºÎThomas×öµ½ÕâÒ»²½Ò²ËãÊÇÏ൱À÷º¦¡£
2Â¥2006-08-26 09:58:16
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ sdlj8051 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 274Çóµ÷¼Á +5 ¹Ë¾ÅóÏҪǫÐé 2026-03-24 5/250 2026-03-24 18:43 by jhhcooi
[¿¼ÑÐ] ²ÄÁÏר˶ÕÒµ÷¼Á +4 ¹þ¹þ¹þºðºðºð¹þ 2026-03-23 4/200 2026-03-24 17:45 by dick_runner
[²ÄÁϹ¤³Ì] Ò»Ö¾Ô¸C9²ÄÁÏÓ뻯¹¤×¨Òµ×Ü·Ö300Çóµ÷¼Á +4 Âü111 2026-03-24 5/250 2026-03-24 15:44 by ÐÇ¿ÕÐÇÔÂ
[¿¼ÑÐ] 086003ʳƷ¹¤³ÌÇóµ÷¼Á +4 íµíµ111 2026-03-24 4/200 2026-03-24 11:53 by 544594351
[»ù½ðÉêÇë] Çë½ÌÏ´ó¼Ò 2026Äê¹ú¼Ò»ù½ðÉêÇëÊÇ˫äÉóÂ𣿠+3 lishucheng1 2026-03-22 5/250 2026-03-24 08:22 by gltch
[¿¼ÑÐ] 298-Ò»Ö¾Ô¸Öйúũҵ´óѧ-Çóµ÷¼Á +11 ÊÖ»úÓû§ 2026-03-17 12/600 2026-03-23 23:51 by ÈÈÇéɳĮ
[¿¼ÑÐ] 265Çóµ÷¼Á +10 ÁºÁºÐ£Ð£ 2026-03-17 10/500 2026-03-23 21:17 by Ò»ÇÐOK
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖØÇì´óѧ085700×ÊÔ´Óë»·¾³£¬×Ü·Ö308Çóµ÷¼Á +7 īīĮ 2026-03-23 8/400 2026-03-23 20:36 by Creta
[¿¼ÑÐ] 328Çóµ÷¼Á£¬Ó¢ÓïÁù¼¶551£¬ÓпÆÑо­Àú +7 ÉúÎ﹤³Ìµ÷¼Á 2026-03-17 12/600 2026-03-23 18:18 by YMUÊ©ÀÏʦ
[¿¼ÑÐ] 291 Çóµ÷¼Á +4 »¯¹¤2026½ì±ÏÒµÉ 2026-03-21 5/250 2026-03-23 16:46 by »¯¹¤2026½ì±ÏÒµÉ
[¿¼ÑÐ] 280·ÖÇóµ÷¼Á Ò»Ö¾Ô¸085802 +4 PUMPT 2026-03-22 7/350 2026-03-22 22:13 by ÐÇ¿ÕÐÇÔÂ
[¿¼ÑÐ] Ò»Ö¾Ô¸»ªÖÐũҵ071010£¬×Ü·Ö320Çóµ÷¼Á +5 À§À§À§À§À¤À¤ 2026-03-20 6/300 2026-03-22 17:41 by hxsm
[¿¼ÑÐ] 298Çóµ÷¼ÁÒ»Ö¾Ô¸211 +3 Éϰ¶6666@ 2026-03-20 3/150 2026-03-22 15:50 by ColorlessPI
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á +4 ÄÝÄÝninicgb 2026-03-21 4/200 2026-03-21 18:39 by ѧԱ8dgXkO
[¿¼ÑÐ] 332Çóµ÷¼Á +3 ·ï»ËÔº¶¡Õæ 2026-03-20 3/150 2026-03-21 10:27 by luoyongfeng
[¿¼ÑÐ] 085700×ÊÔ´Óë»·¾³308Çóµ÷¼Á +12 īīĮ 2026-03-18 13/650 2026-03-21 01:42 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸»ªÖпƼ¼´óѧ£¬080502£¬354·ÖÇóµ÷¼Á +5 ÊØºòϦÑôCF 2026-03-18 5/250 2026-03-21 01:06 by JourneyLucky
[¿¼ÑÐ] 274Çóµ÷¼Á +10 S.H1 2026-03-18 10/500 2026-03-20 23:51 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸Î÷ÄϽ»Í¨ ר˶ ²ÄÁÏ355 ±¾¿ÆË«·Ç Çóµ÷¼Á +5 Î÷ÄϽ»Í¨×¨²Ä355 2026-03-19 5/250 2026-03-20 21:10 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸ ÄϾ©º½¿Õº½Ìì´óѧ´óѧ £¬080500²ÄÁÏ¿ÆÑ§Ó빤³Ìѧ˶ +5 @taotao 2026-03-20 5/250 2026-03-20 20:16 by JourneyLucky
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û