Newsgroup: it.comp.lang.delphi
Titolo: Classi, Help!

Grazie della tua risposta, non preoccuparti se mi mette 0 perché sono
autodidatta quindi non ho questo genere di problema.
Per quanto riguarda la classe, io so scrivere la funzione, il tipo enumerato
etc...
ma non sò dove dichiarare l'interface della funzione; cioè nella sezione
private o  public etc....
Guarda questo esempio che poi ho provato. Mi sai dire perché mi da errore di
compilazione? Precisamente: "This form of method call only allowed for class
method"
type
Convert = class
private
function MetriToCm (x : double) : double;
end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
function Convert.MetriToCm (x : double) : double;
begin
  result := (x * 100);
end;
procedure TForm1.ConvertiClick(Sender: TObject);
var
y, z : double;
begin
  y := STRtoFLOAT (edit1.text);
  z := Convert.MetriToCm (y);
  edit2.text := FLOATtoSTR (z);
end;
Infine mi sai dire dove è l'effettiva utilità delle classi (visto che sono
il cuore dell' Object Pascal ci deve essere)? In questo esercizio, ne potrei
fare benissimo a meno, ma non so però se si può evitare l'uso delle classi
in programmi più coplessi.
Ciao
Luigi
________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at 
http://www.hotmail.com
--
Posted from [195.223.215.247] by way of 
f100.law8.hotmail.com
 [216.33.241.100] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

in programmi più coplessi.
in parole povere, le classi ti consentono di organizzare il programma
 anche se poi molte volte capita di utilizzare indirettamente le classi
all'interno del proprio programma ) dividendo i compiti che deve svolgere.
Se questi compiti sono in relazione fra loro, puoi creare più classi e
metterle in relazione. A questo punto ogni classe svolge un compito anche se
poi le varie sottoclassi sono legate fra loro e quindi accade qualcosa
simile al codice che ti ho postato ieri. Questo sistema gerarchico, consente
di evitare ripetizioni del codice ed estendere facilmente le funzionalità
del programma oltre al fatto che tutto risulta molto più chiaro e leggibile.
Se pensi alla VCL di Delphi, li trovi tutte le classi che rappresentano i
vari componenti ( visuali o meno ) che tu usi abitualmente.
Ogni componente deriva da una classe o direttamente da TComponent.
Questo sistema permette facilmente di crearsi un nuovo componente
derivandolo da uno esistente.
Quando derivi, la classe figlia avrà le stesse caratteristiche della classe
padre,con la sola differenza che la puoi estendere aggiungendo altri metodi
e quindi ti crei qualcosa di tuo che però è in stretta relazione con la
classe padre o per meglio dire dalla classe dove hai derivato.
Vabbè, vista l'ora spero di essermi spiegato !!
Ti saluto.....ciao !!
Antonio Tarolla

Si lo so che devo fare il reply ma Outlook Express non mi inviava il post e
l'ho inviato con HotMail.
Io nel mio esempio non ho messo il costruttore perchè non lo sapevo.
Inoltre nella guida per quanto riguarda l'utilizzo dei costruttori, parla
della parola Inherited, che viene utilizzata ad es. per inizializzare le
variabili delle procedure e funzioni di una classe etc.. è la prima
istruzione nel costruttore e l'ultima
nel distruttore. (Nella guida dice così).
Comunque ora ho riscritto il codice ma mi da lo stesso errore (This form of
method call only allowed for class method).
Se vuoi/puoi controllalo.
Ecco il codice:
type
  TConvertClass = class
  private
      function MetriToCm (x : double) : double;
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
function TConvertClass.MetriToCm (x : double) : double;
  begin
    result := x * 100;
  end;
procedure TForm1.Button1Click(Sender: TObject);
var
  VarClass : TConvertClass;
  y, z : double;
begin
  y := STRtoFLOAT (edit1.text);
  VarClass := TConvertClass.Create;
  z := TConvertClass.MetriToCm (y);
  VarClass.Free;
  edit2.text := FLOATtoSTR (z);
end;
Volevo dirti che io uso Delphi 2 versione DeskTop, quindi non so se è questa
versione che non è adatta o sei tu che credendo che io avessi la 4 ha
scritto del codice incompatibile alla 2
Grazie
Ciao

   z := TConvertClass.MetriToCm (y);
   Stesso errore dell'altro messaggio... infatti non puoi chiamare un metodo
di una classe utilizzando questa sintassi.
Quando tu scrivi VarClass := TConvertrClass.Create, tu "istanzi" l'oggetto
(referenziato dal
 puntatore di classe VarClass, di tipo TConvertClass) VarClass, cioè allochi
la memoria necessaria per
lo "start-up" dell'oggetto.
L'oggetto, quindi, è VarClass, il cui tipo è TConvertClass.
Per farti un esempio, nel tuo codice, se paragoniamo VarClass ad una
variabile, e il suo tipo ad un integer, cioè:
Var  z : integer;  // analogo di z : double
       VarClass : Integer; // analogo di VarClass : TConvertClass
quando tu scrivi
 z := TConvertClass.MetriToCm (y),   è come se scrivessi (x analogia) :
 z := Integer; ... che non ha molto senso... perchè cerchi di assegnare un
tipo ad una variabile...
E quindi, tornando agli oggetti, TConvertClass.MetriToCm è una chiamata da
un tipo (che evidentemente non si può fare **).
In definitiva... devi lavorare con l'oggetto, non col suo tipo, cioè :
z := VarClass.MetriToCm (y);
** C'è un'eccezione a questa regola... cioè nella sintassi di istanziazione
di un oggetto; qui la sintassi (un po' anomala, mi pare, ma
è così... :) ) è : VariabileOggetto := TipoVariabileOggetto.Create
(parametri, se ci sono);
Ok... spero di averti chiarito qualche dubbio... :)
Ciao!! Davide DG

scritto del codice incompatibile alla 2
no, le regole sono quelle !! Al limite i nuovi compilatori includono altre
funzionalità, ma qui stiamo parlando
di qualcosa che sono le basi !!
Vabbè, ti saluto !!
Antonio Tarolla