Costruttore con argomento default

di il
7 risposte

Costruttore con argomento default

Data la seguente classe:
class Pila {
   int nelem;
   int pun;
   int* vet;
public:
   Pila(int N=100) { vet=new int[nelem=N]; pun=0 }
   ...
}
Se ben interpreto il codice quando definisco un oggetto di tipo Pila senza parametri, ad esempio Pila pp, viene definita una variabile intera di identificatore N inizializzata a 100.
Se invece definisco una oggetto di tipo Pila con un parametro, ad esempio Pila dd(20), immagino venga costruita una pila di 20 elementi ma in questo caso la variabile N da quale istruzione viene allocata?!?!? Viene eseguito ugualmente il codice 'int N=100' ignorando l'inizializzazione uguale =100 ?

7 Risposte

  • Re: Costruttore con argomento default

    Non è N a venire allocato dinamicamente, bensì uno spazio di memoria di dimensioni 20*sizeof(int) il puntatore al quale viene "immagazzinato" nella proprietà vet della classe.
  • Re: Costruttore con argomento default

    N è un argomento non una variabile.

    Viene passato come valore nello stack quando viene chiamato il costruttore. Il compilatore passerà il valore 100 nello stack nel primo caso e 20 nel secondo caso. Il codice del costruttore otterrà il valore dallo stack e lo utilizzerà.
  • Re: Costruttore con argomento default

    AldoBaldo ha scritto:


    Non è N a venire allocato dinamicamente, bensì uno spazio di memoria di dimensioni 20*sizeof(int) il puntatore al quale viene "immagazzinato" nella proprietà vet della classe.
    Non sto affermando che N venga allocato dinamicamente, sono consapevole che l'area di memoria dinamica allocata è per l'array di interi.
    Sono stato frainteso, io mi concentravo su N, provo a spiegarmi meglio.
    Il costruttore può prendere due strade:
  • Re: Costruttore con argomento default

    oregon ha scritto:


    N è un argomento non una variabile.

    Viene passato come valore nello stack quando viene chiamato il costruttore. Il compilatore passerà il valore 100 nello stack nel primo caso e 20 nel secondo caso. Il codice del costruttore otterrà il valore dallo stack e lo utilizzerà.
    Ok, ma mi sfugge il perchè questa definizione sia solo all'interno delle parentesi tonde e non si ritrova anche all'interno delle graffe.
    L'allocazione della memoria per N è fatta comunque, indipendentemente con quali valori venga inizializzato, quando si incontra il codice all'interno delle tonde?
  • Re: Costruttore con argomento default

    E' all'interno delle tonde perché è un parametro !

    Se scrivi

    Pila pp;

    o

    Pila pp(100);

    il codice generato è lo stesso.

    In effetti non capisco la tua domanda e i tuoi dubbi.

    Pensa ad una qualunque funzione, non un costruttore. Non cambia nulla.

    char funzione (int n)

    Il valore dell'argomento viene assegnato dal chiamante. Se ne dai uno di default

    char funzione (int n = 100)

    se manca, diventa 100. E' solo "sintassi".
  • Re: Costruttore con argomento default

    Mi sono riletto le vostre risposte ed è più chiaro adesso.
  • Re: Costruttore con argomento default

    Beh ... meno male ..
Devi accedere o registrarti per scrivere nel forum
7 risposte