In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Problema llamada a Super

Foro público de Xailer en español
Responder
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Problema llamada a Super

Mensaje por jose.luis »

Éste es un mensaje de varias partes en formato MIME.
------=_NextPart_000_0010_01CCA88F.167AD480
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0011_01CCA88F.167AD480"
------=_NextPart_001_0011_01CCA88F.167AD480
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hola,
Parece ser que xHarbour tiene alg=FAn problema con el tema de las =
llamadas a Super.
Por ejemplo, y simplificando, este c=F3digo:
CLASS MiClasePadre=20
METHOD New( a )
METHOD A() INLINE ::ClasSName()
METHOD B() INLINE Self:A()
METHOD C() INLINE "Padre"
ENDCLASS
METHOD New( a ) CLASS MiClasePadre
RETURN Self //Super:New(a)
CLASS MiClaseHijo FROM MiClasePadre
METHOD New( a )
METHOD A() INLINE "Hijo"
METHOD B() INLINE Super:ClassName()
METHOD C() INLINE Super:C()
ENDCLASS
METHOD New( a ) CLASS MiClaseHijo
RETURN Super:New(a)
CLASS MiClaseNieto FROM MiClaseHijo
METHOD New( a )
METHOD A() INLINE "Nieto"
METHOD B() INLINE Super:__Super:ClassName()
METHOD C() INLINE Super:__Super:C()
ENDCLASS
METHOD New( a ) CLASS MiClaseNieto
RETURN Super:New(a)
Llam=E1ndolo de esta manera:
o :=3D MiClaseNieto():New( Self )
MsgInfo(o:B(), "Nieto")
MsgInfo(o:C(), "Nieto")
En Harbour devuelve correctamente el ClassName (m=E9todo A) mientras que =
en xHarbour devuelve NIL.
=BFEsto es un fallo xHarbour o se hace diferente que en Harbour?
Os dejo un ejemplo.
Saludos y gracias,
Jos=E9 Luis Capel
------=_NextPart_001_0011_01CCA88F.167AD480
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<HTML><HEAD></HEAD>
<BODY dir=3Dltr>
<DIV dir=3Dltr>
<DIV style=3D"FONT-FAMILY: 'Calibri'; COLOR: #000000; FONT-SIZE: 12pt">
<DIV>Hola,</DIV>
<DIV>Â</DIV>
<DIV>Parece ser que xHarbour tiene alg=FAn problema con el tema de las =
llamadas a=20
Super.</DIV>
<DIV>Â</DIV>
<DIV>Por ejemplo, y simplificando, este c=F3digo:</DIV>
<DIV>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>CLASS MiClasePadre =
</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>ÂÂ METHOD New( a =
)</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>ÂÂ METHOD A() =
INLINE=20
::ClasSName()<BR>ÂÂ METHOD B() INLINE Self:A()<BR>ÂÂ =
METHOD=20
C() INLINE "Padre"<BR>ENDCLASS</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>METHOD New( a ) CLASS=20
MiClasePadre<BR>RETURN Self //Super:New(a)</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>CLASS MiClaseHijo FROM=20
MiClasePadre</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>ÂÂ METHOD New( a =
)</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>ÂÂ METHOD A() =
INLINE=20
"Hijo"<BR>ÂÂ METHOD B() INLINE =
Super:ClassName()<BR>ÂÂ=20
METHOD C() INLINE Super:C()<BR>ENDCLASS</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>METHOD New( a ) CLASS=20
MiClaseHijo<BR>RETURN Super:New(a)</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>CLASS MiClaseNieto FROM=20
MiClaseHijo</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>ÂÂ METHOD New( a =
)</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>ÂÂ METHOD A() =
INLINE=20
"Nieto"<BR>ÂÂ METHOD B() INLINE=20
Super:__Super:ClassName()<BR>ÂÂ METHOD C() INLINE=20
Super:__Super:C()<BR>ENDCLASS</FONT></DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas></FONT>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>METHOD New( a ) CLASS=20
MiClaseNieto<BR>RETURN Super:New(a)<BR></FONT></DIV>
<DIV>Â</DIV>
<DIV>Llam=E1ndolo de esta manera:</DIV>
<DIV>Â</DIV>
<DIV><FONT color=3D#0000ff face=3DConsolas>ÂÂ o :=3D =
MiClaseNieto():New(=20
Self )<BR>ÂÂ MsgInfo(o:B(), "Nieto")<BR>ÂÂ =
MsgInfo(o:C(),=20
"Nieto")</FONT><BR></DIV>
<DIV>Â</DIV>
<DIV>En Harbour devuelve correctamente el ClassName (m=E9todo A) =
mientras que en=20
xHarbour devuelve NIL.</DIV>
<DIV>Â</DIV>
<DIV>=BFEsto es un fallo xHarbour o se hace diferente que en =
Harbour?</DIV>
<DIV>Â</DIV>
<DIV>Os dejo un ejemplo.</DIV>
<DIV>Â</DIV>
<DIV>Saludos y gracias,</DIV>
<DIV>Jos=E9 Luis Capel</DIV></DIV></DIV></BODY></HTML>
------=_NextPart_001_0011_01CCA88F.167AD480--
------=_NextPart_000_0010_01CCA88F.167AD480
Content-Type: application/octet-stream;
name="testclases-1-0-0-0.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="testclases-1-0-0-0.zip"
UEsDBBQAAgAIAA2mdT8qJ1qZWQMAAJkOAAAOAAAAdGVzdGNsYXNlcy54cGqd V9ty2zYQfc9M/oGj
546YtG8dphlbtlLP6OKJEred2g8guKJg41YAtKl8fZaiKIIWNLXwIkt7zsFe sFjA2eda8OQZjGVK
fhp9HH8Yff7j/bvs1qhHoA6/JkmSfdtqSO4Ir+DTCGoYpXv7FVhqmHao7WAH 1lFOLNgDa1k5Xblj
wthfaqKEZhxMR6v/JCZXlTkQ5oTJuSoqfohkqoz4ONam7DkVd0xzuJHWEUnB dtR/DpS/b+dEsjUG
cYzd0D6Pg/GWGCLAYYWOoOX1vLMtDsa7tpbtL8/QMZsSpz36FThgMTp0gF1W jBdBpKkWkdsOu2BU
ieQLVznhyUqt3Qsx8EuyGs/GQ5XefmXlxr3OZLfHhhQwJ+bJhlB0KEC64xqk g3yzK2awbZRhYHvx
CveRAkKdujX4699IyqvC5+wtw1rZ1yt1Jp+2zB89Bv7qgz0KL1vuutcL9qJy ShDH6BzEMzFXgM1q
iN/iC9/ZFeRVeSPXKoiuKq0NWDtjEhaVyME0VCNOr9cpVhtlHK2cY7IMEv8i RkoEZ/AM/NBcPmOu
DOzTC21pA19OJsgIokRPWX/WFsNmkFZxwNMYxpuVMeOnwNJZOih4dl1rzNMr Z79xk9/vv1tsrvtH
ZYFXzI4vvqyW02/3OHWenNKDqu2a4OhEtx7CQV6y8AZ0HRVcrAMvOA+Kr41R ZqbKE1ub63asBuZS
6lcim+BQ8EZIyF2WeqRsyiThmGqvmVac74dqMJrvum7gptdObHILTjkpg/2z G7LcG9mLIBrUZ+kw
4OxusvJGkXfdLJQEb9h0tKxpTu/U7nq1+ZA4rAeXjHc/nCD+D+X4mkk959mM 5YYM511r2npr/FuT
5nJ7aP+MOctHSXNCXrXXaaGidYTKEoG3oY1R/seZA1+4eJsQFWKL6gjpvjjY dG8OdtM+Eh6M42cl
2emeRZSsdC9MnpVhrywrFuWTE1lGCQWhRkUpTVFE6Yp8LV0dK6VFHVValK61 i/JqWR3rdZOjOLa6
pLBRTgmF336NUlK8szUpISpifGQKJaOkWsfJqAGtbJR2k/9gOqpIP1B0jsuc 0gf64QW3ROFj8wyR
tsXTvSpyOtzNN0uFZaI8X0tfztcw0TxPztfhoMS3b/hYZql/eWZp/0/n+3c/ AVBLAwQUAAIACAAu
cXU/9J2PMMgAAAAvAQAAFQAAAFNvdXJjZS90ZXN0Y2xhc2VzLnByZ11PP6vC MBDfC/0OR11aB2sc
Aw6CuCmiDq7hetiDmJRrgvi5/QI28cHzveWG3/9r51AWMIej+Cdh8BoCjQGt GWnMxI6xJ/mDLwa5
ZW5LIwoPyC+nYf/qovXQEZALYjoDBux0BstokiRbNjF40Z9kwt5oWKlWqXa1 VCqhbVmUxYwd2jgl
VVfDlmSBfZXwaSRSF4Vgb9jVTcIAYDPkjsDeabxwsAR6DdXv4CrLLjsvd1U3 +kCP+tsEjT73/pHy
/qWd4k/LiUKU6YM3UEsDBBQAAgAIAAqmdT9mXqcyPAEAAJEDAAAPAAAAU291 cmNlL3Rlc3QucHJn
lZLPboJAEMbvJLzDhF7AgxSPe6MIkUQWIzbpzWzXaVlDxSxg0+fuC5Rdrf+1 BS7km5lvvt8ubs80
oAcTWX4hr0sCNVY1L1iFlS5Egucod3p/Ld+1OsSKS7Hm4ntFtOA3dSm3nxHy nBEYeK7nuYNHz1Oq
axqm8SBWvGgWCNYLEwXKPs8tpas3GPtZBokI1OoJW0gE142maQJ1+rpso9mO agOAJJyN0iFQ/LSB
wZnq2w7EdBzTECztYh1Xnw7VDIs3opZVlH2gMj+0BVdMQjrUEdW6swRwmd00 puHseUr1mhYka9Yo
iRpgzlXikViWoHFPbboRK5ebwDrC38S7PlX/N7Pae0A+Yz3ppALrU9DtbDdO 7XIfdD6/AG7vof1x
Nw0WGwQaj+8ewH6+Lfw+x/PH12Q7hHc6L53/xoH9AFBLAwQUAAIACAAapXU/ LOw0ARYBAABtAgAA
EAAAAFNvdXJjZS9Gb3JtMS5wcme1UbFugzAQ3ZH4hxNdIGpDnRGpAzGgVgIT BSp1Rc4RrBIcGaO2
390faG0Ykg6dWnu5e+/O9945XLkOrGCn5AdyLSPQOGreNyOOlsgE71B945lU J7I+q6OFExy5Emcu
PofIAvGkpZrDDHnXRLAhISHh5p4Qg4au4zo3YuD9dEDwXhrRo1rzzjM4zeOq gtqOgGxfFnNsKACg
ZbErWcpqkNtJazmQhSjS+rFMgCpsNJoGP7jEl2LaC/7qg6xwOKCCwDSnLLEz r0XNFt/bkxUVhnd/
esybvyuDyz0sHvOSxjlIk9lcQvQAhaDmh5hALf0gYvjmQ4V9C4v/8fg0tNKX 0dYPbsGzdd5Pjl5z
5u7T+nnPgIn+fxbwBVBLAwQUAAIACADPcXU/se4hOf8AAADZAQAAEAAAAFNv dXJjZS9Gb3JtMS54
Zm1dUFFrgzAYfBf8Dx8+RZASre1KYA/TGupYFZqMPZcuBZlLho1s7NcviR2m zdPlu0vu7ttXfNdu
oRzEUQuqhk8E/XSBGMqXJ8aA23EaBmEAADX9593VHEKY0IUa5fsFQf6AE8hw lkC+MmiJMcQ3wrLv
hNSs+xVGvMyNeJ35khMXPxrII0TONZoZRZV0DLcAxWSKgSDaM2BHeQEmhu4c JbBJwHjnt95X9TSp
mm1NHWLjlxiIX39BF/adY99qvoO2eK5KbhMUo9ZKpi7EhE2MRnwjY92fPTdv Iyk2cdYmz8ZuZuWJ
5qrXf+eyrTR7On34pBvMivs6NvCh4q+HxmUJgz9QSwECFAAUAAIACAANpnU/ KidamVkDAACZDgAA
DgAAAAAAAAAAACAAtIEAAAAAdGVzdGNsYXNlcy54cGpQSwECFAAUAAIACAAu cXU/9J2PMMgAAAAv
AQAAFQAAAAAAAAAAACAAtIGFAwAAU291cmNlL3Rlc3RjbGFzZXMucHJnUEsB AhQAFAACAAgACqZ1
P2ZepzI8AQAAkQMAAA8AAAAAAAAAAAAgALSBgAQAAFNvdXJjZS90ZXN0LnBy Z1BLAQIUABQAAgAI
ABqldT8s7DQBFgEAAG0CAAAQAAAAAAAAAAAAIAC0gekFAABTb3VyY2UvRm9y bTEucHJnUEsBAhQA
FAACAAgAz3F1P7HuITn/AAAA2QEAABAAAAAAAAAAAAAgALSBLQcAAFNvdXJj ZS9Gb3JtMS54Zm1Q
SwUGAAAAAAUABQA4AQAAWggAAAAA
------=_NextPart_000_0010_01CCA88F.167AD480--

Attached files testclases-1-0-0-0.zip (2.4 KB)Â
xmessoft
Mensajes: 37
Registrado: Lun Jun 06, 2011 5:15 pm

Problema llamada a Super

Mensaje por xmessoft »

Eso no lo deberí­a ni permitir...
Que sentido que el método constructor de una clase devuelva un objeto de
la clase padre? Siempre deberí­a de devolver Self se ponga lo que se
ponga en el return. Otra cosa es que pongas:
METHOD New( a ) CLASS MiClaseHijo
::oPadre := Super:New(a)
RETURN Self
y ::oPadre será un objeto de la clase padre inicializado.
Por lo demás esto lo haces para putear un poco al compilador no?
JAJAJA
Saludos y a ver si nos hablamos questamos mu perdios los dos...
Manu
El 21/11/2011 20:49, José Luis Capel escribió:
> Hola,
> Parece ser que xHarbour tiene algún problema con el tema de las llamadas
> a Super.
> Por ejemplo, y simplificando, este código:
> CLASS MiClasePadre
> METHOD New( a )
> METHOD A() INLINE ::ClasSName()
> METHOD B() INLINE Self:A()
> METHOD C() INLINE "Padre"
> ENDCLASS
> METHOD New( a ) CLASS MiClasePadre
> RETURN Self //Super:New(a)
> CLASS MiClaseHijo FROM MiClasePadre
> METHOD New( a )
> METHOD A() INLINE "Hijo"
> METHOD B() INLINE Super:ClassName()
> METHOD C() INLINE Super:C()
> ENDCLASS
> METHOD New( a ) CLASS MiClaseHijo
> RETURN Super:New(a)
> CLASS MiClaseNieto FROM MiClaseHijo
> METHOD New( a )
> METHOD A() INLINE "Nieto"
> METHOD B() INLINE Super:__Super:ClassName()
> METHOD C() INLINE Super:__Super:C()
> ENDCLASS
> METHOD New( a ) CLASS MiClaseNieto
> RETURN Super:New(a)
> Llamándolo de esta manera:
> o := MiClaseNieto():New( Self )
> MsgInfo(o:B(), "Nieto")
> MsgInfo(o:C(), "Nieto")
> En Harbour devuelve correctamente el ClassName (método A) mientras que
> en xHarbour devuelve NIL.
> ¿Esto es un fallo xHarbour o se hace diferente que en Harbour?
> Os dejo un ejemplo.
> Saludos y gracias,
> José Luis Capel
Responder