ironmansp escribió:
todos los objetos se crean a partir de otros objetos. He llegado a la conclusion de que se deben crear a partir de alguno, llamese tcomponent o tobject..., lueho he visto que no es necesario y he dejado el codigo asi, pero me sigue dando error:
#include "Gui.ch"
Function Main()
Local nDescriptor
nDescriptor := TArchivo:Create("HOLA.HOL")
? nDescriptor
Return NIL
Class TArchivo
private:
public:
data cNombre
data nDescriptor
data nAtributos
Method Create Constructor
Method Open
Method Close
/*property Descriptor read data nDescriptor
property Nombre read data cNombre
*/
Endclass
Method create( oOwner ) Class TArchivo
::nDescriptor := NIL
::cNombre := Space(120)
::nAtributos := 0
Return
Method open( oOwner ) Class TArchivo
Local nDescriptor
If File(::cNombre)
nDescriptor := Fopen(::cNombre)
::nDescriptor := nDescriptor
Endif
Return
Method close( oOwner ) Class TArchivo
FClose(::nDescriptor)
Return NIL
Hola, Josu
#include "Gui.ch"
Function Main()
Local oArchivo
oArchivo := TArchivo:Create("HOLA.HOL")
? oArchivo:IsOpen
Return NIL
Class TArchivo
private:
method GetIsOpen
public:
data cNombre
data nDescriptor
data nAtributos
Method Create Constructor
Method Open
Method Close
property IsOpen read method GetIsOpen
/*property Descriptor read data nDescriptor
property Nombre read data cNombre
*/
Endclass
method Create( FileName, Mode ) class TArchivo
if Mode == fmCreate
::FHandle := FCreate( FileName )
if ::FHandle < 0
MsgStop( "Error creando ", FileName )
return
endif
else
::FHandle := FOpen( FileName )
if ::FHandle < 0
MsgStop( "Error abriendo ", FileName )
return
endif
endif
::FFileName := FileName
::FMode := Mode
return
Method create( cNombre, nModo ) Class TArchivo
::nDescriptor := NIL
::cNombre := cNombre
::nAtributos := 0
Return
Method open() Class TArchivo
Local nDescriptor /// ¿para que?
If File(::cNombre)
::nDescriptor := Fopen(::cNombre)
//::nDescriptor := nDescriptor // sobra
Endif
Return
Method close() Class TArchivo
if ::IsOpen
FClose(::nDescriptor)
endif
Return NIL
// Este método es SOLO VISIBLE PARA LA CLASE
// No se puede llamar desde fuera, por ejemplo:
// oArchivo:GetIsOPen() DARÍA ERROR.
method GetIsOpen() Class TArchivo
return ( ::nDescriptor > 0 )
1º nDescriptor := TArchivo:Create("HOLA.HOL")
La creación de un objeto, devuelve.... ¿?¿?¿? UN OBJETO!!!!!
oArchivo := TArchivo:Create("HOLA.HOL")
2º En la parte PRIVATE, declara las variables privadas de la clase:
private:
data FName // Solo visible para la pripia clase
public:
property Name read data FName
Declarandolo así la propiedad, estamos permitiendo leer Name, pero NO PERMITIMOS la ESCRITURA (fuera de la clase, claro).
3º Los oOwner como parametro ¿para que?
... ya contarás....