Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C++] Argomenti del costruttore
Forum - C/C++ - [C++] Argomenti del costruttore

Avatar
skyla (Normal User)
Newbie


Messaggi: 2
Iscritto: 26/06/2013

Segnala al moderatore
Postato alle 12:15
Mercoledì, 26/06/2013
Ciao.
Ho iniziato a studiare la programmazione C++ da poco e ci sono alcuni concetti che non mi sono ben chiari.
Non ho capito a cosa serve inserire o non inserire gli argomenti nel costruttore.
In questo esempio cosa comporta scrivere il costruttore senza argomenti o con gli argomenti?

Grazieeeee

Codice sorgente - presumibilmente C++

  1. tempo.h:
  2.  
  3. #ifndef tempo_h
  4. #define tempo_h
  5.  
  6. #include <cstdlib>
  7. #include <iostream>
  8.  
  9. using namespace std;
  10.  
  11. class tempo{
  12. public:
  13.       tempo(); //costruttore senza parametri
  14.       tempo(int ore, int minuti=0); //costruttore a due parametri
  15.       tempo(const tempo& t); //costruttore di copia
  16.       int Ore();
  17.       int Minuti();
  18.       int Secondi();
  19. void AggiungiUnOra();
  20. void ImpostaTempo(int ore, int minuti, int secondi);
  21. private:
  22. long int sec; //variabile che conserva il tempo      
  23. void normalize(); //normalizza sec sotto l2 24 ore.
  24. friend ostream& operator<<(ostream& os, tempo& t);
  25. };


PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 14:02
Mercoledì, 26/06/2013
Ciao!

Il costruttore è un metodo che serve a inizializzare un oggetto quando viene creato. Di conseguenza, puoi scegliere tu quali e quanti argomenti passare, o fornire più versioni, sfruttando  l'overload.
Il costruttore senza parametri, può essere utile nel caso definisci un vettore statico di un determinato oggetto:

Se una classe possiede un costruttore senza parametri, puoi dichiarare:
Codice sorgente - presumibilmente Plain Text

  1. tempo t[3]; // Ad ogni elemento, sara chiamato il costruttore senza parametri



Altrimenti:
Codice sorgente - presumibilmente C/C++

  1. tempo t[3]={tempo(2, 4), tempo(3, 25), tempo(0)}; // Qui devi richiamare il costruttore per ogni termine del vettore.


Ultima modifica effettuata da Poggi Marco il 26/06/2013 alle 14:06


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 413
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 17:19
Mercoledì, 26/06/2013
Il costrutture serve affinché l'oggetto che crei abbia un comportamento diverso a seconda di cosa gli passi.
E cioè, un oggetto che fa qualcosa ha delle variabili(private) che dipendono dall'esterno.

Se il costruttore di una classe come quella che hai tu, che logicamene dipende dal tempo che setti, ha un costruttore senza parametri vuol dire che c'è una configurazione di default che l'implementatore ritiene sia utile:
nel tuo caso ad esempio potrebbe essere sec = 0, oppure un valore ottenuto dal sistema.  

PM Quote
Avatar
skyla (Normal User)
Newbie


Messaggi: 2
Iscritto: 26/06/2013

Segnala al moderatore
Postato alle 18:39
Mercoledì, 26/06/2013
quindi se devo costruire una classe tempo in cui ci siano costruttori che permettono di scrivere funzioni del tipo:
Codice sorgente - presumibilmente C#

  1. tempo oggi=8;
  2.  
  3. tempo ieri="mezzanotte";
  4. ieri="pomeriggio";
  5.  
  6. ieri=2.5;
  7.  
  8. Considerando solo il costruttore con la stringa, ho provato a fare nel seguente modo ma non funziona.
  9.  
  10. Ho scritto la classe :
  11.  
  12. class tempo
  13. {
  14. public:
  15. tempo(std::string a);
  16.  
  17. char Fascia();
  18.  
  19. private:
  20. string a;
  21. };
  22.  
  23. l'ho implementata così:
  24.  
  25. tempo::tempo(std::string a)
  26. {return a=0;}
  27. char tempo::Fascia()
  28. {return a="mezzanotte";}
  29.  
  30. infine ho invocato il costruttore nel main così :
  31.  
  32. tempo ieri("mezzanotte");
  33. cout << ieri.Fascia() <<endl;





Ultima modifica effettuata da skyla il 26/06/2013 alle 18:42
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 413
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 21:10
Mercoledì, 26/06/2013
Penso che tu non abbia le idee ben chiare su cosa vuoi...
Quando si programma ad oggetti devi farti delle domande ben precise:
1) Cosa devono fare i miei oggetti?
Nel tuo caso hai degli oggetti che sono istanze della classe tempo. Quindi cosa fa questa classe tempo? Che in programmazione si traduce con: quali metodi/attributi deve esporre la mia classe?

Dopo che hai pensato bene a questo, puoi passare a
2) Come deve funzionare a livello pratico l'oggetto? E cioè quali variabili private devo dichiarare e che implementazione devo usare per i metodi?

Va detto inoltre che il nome della classe deve rappresentare innazitutto il "cos'è"(mi verrebbe da dire il <<ti estì>> di Aristotele), e poi a volte anche il tipo di implementazione.

La tua classe tempo ha un nome un po' poco indicativo sul cosa è e cosa fa.

Codice sorgente - presumibilmente C/C++

  1. tempo::tempo(std::string a)
  2. {return a=0;}
  3. char tempo::Fascia()
  4. {return a="mezzanotte";}



Dovresti anche rivedere questo codice perché non ha minimamente senso

PM Quote