Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2006
Avatar de Alcolea
Alcolea Alcolea is offline
Miembro
NULL
 
Registrado: abr 2006
Ubicación: Santiago de Cuba, Cuba
Posts: 100
Poder: 14
Alcolea Va por buen camino
Question Implementar el constructor de una clase

Hola a todos, más bien se trata de inicializar en el constructor de una clase un atributo que es un arreglo

Por ejemplo:

Código Delphi [-]
Team = class
 private
   Jugadores : array[0..19]of Jugador;
   Index     : Byte;

 public   
   constructor CreaTeam(AIndex : Byte; Jugadores ¿¿¿); 

 implementation

      constructor Team.CreaTeam(AIndex : Byte; Jugadores ¿¿¿); 
      begin
        Index := AIndex;
        ¿¿¿
      end;

 end;

¿En esta clase que les presento como puedo plantear la inicialización del atributo “jugadores” que es un arreglo?

Estaré muy agradecido de la ayuda que puedan brindarme
Responder Con Cita
  #2  
Antiguo 14-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.692
Poder: 28
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver si esto puede servirte de algo. Si tienes alguna duda ya sabes que aquí hay gente dispuesta a echarte una mano.

Código Delphi [-]
unit UTeam;

interface

{ Clase TJugador, que me invento y a la que añado
  una propiedad para que sirva de ejemplo. Creo
  esta clase porque estás solicitando un Array
  de Jugadores... y tiene que haber jugadores...
}
type
  TJugador = class
  private
    FNombre: string;
  public
    property Nombre: string read FNombre write FNombre;
  end;

{ Tipo Array de jugadores
}
type
  TArrayJugadores = array[0..19] of TJugador;

{ Clase TTeam... ¿te fijaste que nombré las clases
  comenzando por "T" de "Type"? Es una convención
  muy utilizada en Delphi, así como comenzar los
  identificadores de variables privadas con "F"
  de "Field". ;-)
}
type
  TTeam = class
  private
    FIndex: Byte;
    FJugadores: TArrayJugadores;
  public
    constructor CreaTeam(AIndex: Byte; Jugadores: TArrayJugadores);
  public
    { Añado también la propiedad de sólo lectura Jugadores
      y lo hago únicamente para que en el ejemplo podamos
      apreciar cómo acceder a la misma, es decir, para
      comprobar cómo las asignaciones se llevan a cabo.
    }
    property Jugadores: TArrayJugadores read FJugadores;
  end;

implementation

{ Constructor de la clase "TTeam". Nota cómo
  llamamos al método "Create" heredado de la
  clase "TObject" por la clase "TTeam".
}
constructor TTeam.CreaTeam(AIndex : Byte; Jugadores: TArrayJugadores);
begin
  inherited Create;
  FIndex := AIndex;
  FJugadores := Jugadores;
end;

Código Delphi [-]
{ --------------------------------------------------------------------- }
{ Ejemplo de uso de la clase TTeam                                      }
{ (Se supone que la clase TTeam se encuentra en la unidad UTeam.pas     }
{ y que nosotros estamos trabajando en un formulario "Form1", como      }
{ puede verse a continuación                                            }
{ --------------------------------------------------------------------- }

uses
  UTeam;

procedure TForm1.Button1Click(Sender: TObject);
var
  team: TTeam;
  jugador1, jugador2: TJugador;
  arrayJugadores: TArrayJugadores;
begin

  jugador1 := TJugador.Create;
  jugador1.Nombre := 'José Luis';

  jugador2 := TJugador.Create;
  jugador2.Nombre := 'Juan Carlos';

  arrayJugadores[0] := jugador1;
  arrayJugadores[1] := jugador2;

  team := TTeam.CreaTeam(2, arrayJugadores);
  try

    ShowMessage(team.Jugadores[0].Nombre);
    ShowMessage(team.Jugadores[1].Nombre);

  finally
    team.Free;
    jugador1.Free;
    jugador2.Free;
  end;
end;
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 14-06-2006
Avatar de Alcolea
Alcolea Alcolea is offline
Miembro
NULL
 
Registrado: abr 2006
Ubicación: Santiago de Cuba, Cuba
Posts: 100
Poder: 14
Alcolea Va por buen camino
Thumbs up Entiendo pero...

Solo me limité a colocar la parte del código que no comprendía, los jugadores en mi clase original los saco de un registro y no de una clase jugador como explicas. Pienso que no importa de donde surgió el arreglo, la implentación que me propones debe servirme para cualquier arreglo.

Otro asunto es que quiero crear la clase desde cero, o sea, con todos los atributos sin valores, como debe pasar al llamar al contructor por defecto create pero me da un error, "EAccessViolation".

En la práctica el problema es este (lógico, después de tu ayuda dec)

Código Delphi [-]
   
type
 Jugador = record
           Nombre : String;
           VB     : Integer;
           Jr     : Integer;
           Hits   : Integer;
           Avg    : Integer;
          end;

 Juego = array[0..19]of Jugador;

 Team = class
 private
   Jugadores : Juego;

 public
   Index     : Byte;
   constructor CreaTeam(AIndex : Byte; AJugadores : Juego);
   procedure Insert(Nombre : String; VB, Jr, Hits, Avg : Integer);
   {Aquí van otros métodos que no me causan problemas}
 end;

implementation

   constructor Team.CreaTeam(AIndex : Byte; AJugadores : Juego);
   begin
    inherited Create;
    Index     := AIndex;       
    Jugadores := AJugadores;
   end;


Al Aplicar el costructor en la Unit de un formulario

Código Delphi [-]
procedure TForm1.Button4Click(Sender: TObject);
begin
 MiTeam := Team.CreaTeam(0,Miembros);
 {Sucede que el error estaba en la manera de llamar al constructor de
 la clase, que deber ser como está aquí, y lo tenía así  
MiTeam.CreaTeam(0,Miembros) anteriormente}
end;

Gracias dec me ha servido de mucho tu ayuda como en otras ocaciones.

Última edición por Alcolea fecha: 14-06-2006 a las 07:44:33.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Constructor de forms lafirma OOP 6 07-11-2006 14:15:55
Implementar cliente-servidor tato Servers 6 22-08-2006 02:18:26
constructor...propiedad heredada modulay OOP 11 08-02-2006 23:27:27
Constructor kalimero OOP 8 07-09-2005 17:00:11
constructor y destructor gustavo2 OOP 11 23-04-2004 20:23:20


La franja horaria es GMT +2. Ahora son las 15:57:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi