FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Objetos y demás zarandajas
Posts: 172
Joined: Fri Oct 07, 2005 12:00 PM
Objetos y demás zarandajas
Posted: Mon Oct 23, 2006 11:51 AM
Hola a todos:

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

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
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Objetos y demás zarandajas
Posted: 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)
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Objetos y demás zarandajas
Posted: Tue Oct 24, 2006 11:59 AM

Paco,

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 172
Joined: Fri Oct 07, 2005 12:00 PM
Objetos y demás zarandajas
Posted: Wed Oct 25, 2006 07:04 AM

Pues si, acabo de comprobarlo. ¿Cual es la explicación de que funcione?

Posts: 229
Joined: Wed Oct 12, 2005 05:32 PM
Objetos y demás zarandajas
Posted: Wed Oct 25, 2006 07:58 AM
Paco,

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

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
Posts: 172
Joined: Fri Oct 07, 2005 12:00 PM
Objetos y demás zarandajas
Posted: Wed Oct 25, 2006 08:08 AM

Gracias,

El problema es que no me habia percatado de como funcionaban los operadores.

Continue the discussion