Dichiarazione variabili di tipi composti

oleg.fresi
Ho creato una classe di nome Dado, dunque posso creare variabili di tipo Dado, giusto?
Che differenza c'è tra lo scrivere Dado d1; e Dado d1(6); ? La prima è una dichiarazione di variabile ma la seconda dovrebbe essere un costruttore. La prima si può utilizzare o no. Alla prima dichiarazione posso assegnare un valore o no? Sono un pò confuso in merito a questo argomento.

Risposte
niccoset
"olegfresi":
Ho creato una classe di nome Dado, dunque posso creare variabili di tipo Dado, giusto?

Si

"olegfresi":
Che differenza c'è tra lo scrivere Dado d1; e Dado d1(6); ? La prima è una dichiarazione di variabile ma la seconda dovrebbe essere un costruttore. La prima si può utilizzare o no. Alla prima dichiarazione posso assegnare un valore o no? Sono un pò confuso in merito a questo argomento.

Suppongo che tu stia lavorando in c++. Con l'istruzione
Dado d1; 
crei (sarebbe meglio dire istanzi) un oggetto d1 di tipo Dado utilizzando il costruttore di default che può essere quello da te definito o quello generato di default dal tuo compilatore. Con
Dado d1(6); 
crei l'oggetto d1 usando un costruttore da te definito in cui ad esempio vai a settare un attributo della classe Dado (ad esempio
private int numeroDiFacce; 
.

"olegfresi":
Alla prima dichiarazione posso assegnare un valore o no? Sono un pò confuso in merito a questo argomento.
Diversamente dall'usuale dichiarazione di variabili per settare gli attributi di una classe di usano i costruttori.

oleg.fresi
Perfetto, grazie mille, hai chiarito tutti i miei dubbi a riguardo!

oleg.fresi
Scusa, mi è sorto un dubbio: se io dichiaro una variabile Dado d1; io sto chiamando un costruttore vuoto come se scrivessi Dado d1(), giusto? Se questo è vero io dichiaro una variabile Dado d1 e posso eseguire il comando d1.funzione, se invece dachiaro una variabile così: Dado d1() non posso più scrivere d1.funzione, però in entrambi i casi io sto chiamando un costruttore di defaulte. Come mai non è possibile invocare un metodo sulla variabile nel secondo caso?

niccoset
Perchè il costruttore di default si scrive senza parentesi (cioè Dado d1; ). Nel secondo caso credo che lui interpreti l'istruzione Dado d1() come la dichiarazione di una funzione ( di nome d1 e che ritorna un tipo Dado) e per questo il compilatore ti dà un errore quando provi a fare d1.funzione().

oleg.fresi
Ah, già, non ci ho proprio pensato, grazie mille ancora.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.