Objetos y demás zarandajas

Post Reply
User avatar
Paco Garcia
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm
Contact:

Objetos y demás zarandajas

Post 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
User avatar
carlos vargas
Posts: 1421
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Post 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
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Paco,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Paco Garcia
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm
Contact:

Post by Paco Garcia »

Pues si, acabo de comprobarlo. ¿Cual es la explicación de que funcione?
User avatar
jlcapel
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España
Contact:

Post 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
User avatar
Paco Garcia
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm
Contact:

Post by Paco Garcia »

Gracias,

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