Oppure

Loading
26/06/13 10:15
skyla
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

tempo.h:

#ifndef tempo_h
#define tempo_h

#include <cstdlib>
#include <iostream>

using namespace std;

class tempo{
public:
      tempo(); //costruttore senza parametri
      tempo(int ore, int minuti=0); //costruttore a due parametri
      tempo(const tempo& t); //costruttore di copia
      int Ore();
      int Minuti();
      int Secondi();
void AggiungiUnOra();
void ImpostaTempo(int ore, int minuti, int secondi);
private:
long int sec; //variabile che conserva il tempo      
void normalize(); //normalizza sec sotto l2 24 ore.
friend ostream& operator<<(ostream& os, tempo& t);
};
aaa
26/06/13 12:02
Poggi Marco
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:
tempo t[3]; // Ad ogni elemento, sara chiamato il costruttore senza parametri


Altrimenti:
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 26/06/13 12:06
aaa
26/06/13 15:19
lumo
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.
aaa
26/06/13 16:39
skyla
quindi se devo costruire una classe tempo in cui ci siano costruttori che permettono di scrivere funzioni del tipo:
tempo oggi=8;

tempo ieri="mezzanotte";
ieri="pomeriggio";

ieri=2.5;

Considerando solo il costruttore con la stringa, ho provato a fare nel seguente modo ma non funziona.

Ho scritto la classe :

class tempo
{
public:
tempo(std::string a);

char Fascia();

private:
string a;
};

l'ho implementata così:

tempo::tempo(std::string a)
{return a=0;}
char tempo::Fascia()
{return a="mezzanotte";}

infine ho invocato il costruttore nel main così :

tempo ieri("mezzanotte");
cout << ieri.Fascia() <<endl;



Ultima modifica effettuata da skyla 26/06/13 16:42
aaa
26/06/13 19:10
lumo
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.

tempo::tempo(std::string a)
{return a=0;}
char tempo::Fascia()
{return a="mezzanotte";}


Dovresti anche rivedere questo codice perché non ha minimamente senso
aaa