Znn3bq.jpeg
ÉÇÍ·´óѧº£Ñó¿ÆÑ§½ÓÊܵ÷¼Á
²é¿´: 254  |  »Ø¸´: 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 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] ²ÄÁϹ¤³Ì281»¹Óе÷¼Á»ú»áÂð +34 xaw. 2026-04-11 35/1750 2026-04-13 22:22 by zhq0425
[¿¼ÑÐ] 085600²ÄÁÏÓ뻯¹¤349·ÖÇóµ÷¼Á +13 Àîľ×Ó°¡¹þ¹þ 2026-04-12 14/700 2026-04-13 22:19 by pies112
[¿¼ÑÐ] 22ר˶Çóµ÷¼Á +8 haoyunÉϰ¶ 2026-04-11 10/500 2026-04-13 22:15 by zhq0425
[¿¼ÑÐ] ÉúÎïѧ308·ÖÇóµ÷¼Á£¨Ò»Ö¾Ô¸»ª¶«Ê¦´ó£©½ÓÊÜ¿çרҵ +8 ÏàÐűػá¹ââÍòÕ 2026-04-13 8/400 2026-04-13 20:26 by biomen
[¿¼ÑÐ] 302Çóµ÷¼Á +10 Ò×£¡? 2026-04-13 10/500 2026-04-13 19:04 by lbsjt
[¿¼ÑÐ] Ò»Ö¾Ô¸Î÷½»»úеר˶Çóµ÷¼Á +9 ÇóÉϰ¶µÄСÍõ 2026-04-10 9/450 2026-04-13 16:08 by jiangguiquan11
[¿¼ÑÐ] 0854µ÷¼Á +10 ³¤¹­°Á 2026-04-11 11/550 2026-04-13 10:38 by wp06
[¿¼ÑÐ] ҩѧÇóµ÷¼Á +3 RussHu 2026-04-12 4/200 2026-04-12 17:49 by ³ÂƤƤ
[¿¼ÑÐ] Ò»Ö¾Ô¸Ïôó0856£¬306Çóµ÷¼Á +15 Bblinging 2026-04-11 15/750 2026-04-11 22:53 by 314126402
[¿¼ÑÐ] µç×ÓÐÅÏ¢279Çóµ÷¼Á£¬ÓÐÊé¶Á¾ÍÐÐ +8 wwwooden 2026-04-08 11/550 2026-04-11 20:22 by cq2548
[¿¼ÑÐ] ũѧ0904 312Çóµ÷¼Á +3 Say Never 2026-04-11 3/150 2026-04-11 17:22 by daydayup2005
[¿¼ÑÐ] 275Çóµ÷¼Á +9 1624447980 2026-04-08 10/500 2026-04-11 10:20 by Delta2012
[¿¼ÑÐ] 346£¬¹¤¿Æ0854Çóµ÷¼Á£¬×¨Ë¶ +7 moser233 2026-04-10 8/400 2026-04-11 08:52 by Öí»á·É
[¿¼ÑÐ] 085404 298·ÖÇóµ÷¼Á +10 ºôÀ²ºôÀ²ºôºôºô 2026-04-10 11/550 2026-04-10 16:44 by wangy0907
[¿¼ÑÐ] 298Çóµ÷¼Á +13 ¶¤¶£ß˶¬¹Ï 2026-04-09 13/650 2026-04-10 15:49 by jiajinhpu
[¿¼ÑÐ] µ÷¼ÁÉêÇë086000Ò»Ö¾Ô¸Î÷±±Å©ÁֿƼ¼´óѧÉúÎïÓëÒ½Ò©320·Ö-±¾¿ÆÆë³¹¤Òµ´óѧ +3 ÃÀÃÀŮʿ 2026-04-09 3/150 2026-04-10 10:31 by liuhuiying09
[¿¼ÑÐ] 314Çóµ÷¼Á +14 weltZeng 2026-04-09 14/700 2026-04-09 23:14 by wolf97
[¿¼ÑÐ] 083200 ³õÊÔ305·Ö Çóµ÷¼Á Ôݲ»¿¼ÂÇ¿çרҵ +15 Claireyyyy 2026-04-09 15/750 2026-04-09 16:11 by zhuimr
[¿¼ÑÐ] 085404£¬334·Ö£¬Çóµ÷¼Á +5 sunjie8888 2026-04-08 8/400 2026-04-09 07:26 by sunjie8888
[¿¼ÑÐ] Ò»Ö¾Ô¸211£¬»¯Ñ§Ñ§Ë¶£¬310·Ö£¬±¾¿ÆÖصãË«·Ç£¬Çóµ÷¼Á +10 ŬÁ¦·Ü¶·112 2026-04-07 10/500 2026-04-08 15:01 by screening
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û