Objetos y demás zarandajas

Objetos y demás zarandajas

Postby Paco Garcia » Mon Oct 23, 2006 11:51 am

Hola a todos:

A ver si alguien me puede decir como se podría hacer esto:

Code: Select all  Expand view  RUN

local o := CString():New( "Hola que tal estas" )

? o - "que tal " ---> "Hola estas"


CLASS CString

      DATA cBuffer

      METHOD New( cBuffer ) CONSTRUCTOR
      METHOD Menos( cAux )   OPERATOR "-"

ENDCLASS

METHOD New( cBuffer ) CLASS CString

  ::cBuffer := cBuffer

return self


METHOD Menos( cAux ) CLASS CString

return strtran( ::cBuffer, cAux, "" )



y que en vez de poner o:cBuffer - "que tal ",
pusiera "o" y que apunte a cBuffer.

Un saludo

Paco García
User avatar
Paco Garcia
 
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm

Postby carlos vargas » Tue Oct 24, 2006 12:33 am

paco no se si te sirva:


ASSOCIATE CLASS:
----------------
The ASSOCIATE CLASS syntax allows the xHarbour developer to replace the
standard classes for native types with any alternative class, including
classes dervied from the standard classes. As well as complete support
for Operator Overloading for native types.

Syntax:
-------

ASSOCIATE CLASS <ClassName> WITH TYPE
ARRAY|BLOCK|CHARACTER|DATE|LOGICAL|NIL|NUMERIC|POINTER
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Postby Antonio Linares » Tue Oct 24, 2006 11:59 am

Paco,

El código que has publicado funciona perfectamente :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42150
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Paco Garcia » Wed Oct 25, 2006 7:04 am

Pues si, acabo de comprobarlo. ¿Cual es la explicación de que funcione?
User avatar
Paco Garcia
 
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm

Postby jlcapel » Wed Oct 25, 2006 7:58 am

Paco,

Es la sobrecarga de operadores. Mira este ejemplo (continuado del tuyo).

Code: Select all  Expand view  RUN
FUNCTION Main()
local o := CString():New( "Hola que tal estas" )

Msginfo( o - "que tal "  )  // 'Hola estas'
MsgInfo( o + " PepeLuis") // Hola que tal estas PepeLuis'
MsgInfo( STR( o * 30) ) // 150
RETURN NIL

CLASS CString

      DATA cBuffer
      DATA nBuffer

      METHOD New( cBuffer ) CONSTRUCTOR
      METHOD Menos( cAux )   OPERATOR "-"
      METHOD Mas( u ) OPERATOR "+"
      METHOD Por( u ) OPERATOR "*"


ENDCLASS

METHOD New( cBuffer ) CLASS CString

  ::cBuffer := cBuffer
  ::nBuffer := 5

return self

METHOD Menos( cAux ) CLASS CString
return strtran( ::cBuffer, cAux, "" )

METHOD MAS( u ) CLASS cString
RETURN ::cBuffer + u

METHOD POR( u ) CLASS cString
RETURN ::nBuffer * u


Se pueden sobrecargar prácticamente todos los operadores existentes en (x)harbour.

Saludos,
José Luis Capel
User avatar
jlcapel
 
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España

Postby Paco Garcia » Wed Oct 25, 2006 8:08 am

Gracias,

El problema es que no me habia percatado de como funcionaban los operadores.
User avatar
Paco Garcia
 
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Willi Quintana and 60 guests