Page 1 of 1

Objetos y demás zarandajas

Posted: Mon Oct 23, 2006 11:51 am
by Paco Garcia
Hola a todos:

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

Code: Select all


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

Posted: Tue Oct 24, 2006 12:33 am
by carlos vargas
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

Posted: Tue Oct 24, 2006 11:59 am
by Antonio Linares
Paco,

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

Posted: Wed Oct 25, 2006 7:04 am
by Paco Garcia
Pues si, acabo de comprobarlo. ¿Cual es la explicación de que funcione?

Posted: Wed Oct 25, 2006 7:58 am
by jlcapel
Paco,

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

Code: Select all

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

Posted: Wed Oct 25, 2006 8:08 am
by Paco Garcia
Gracias,

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