Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]Capire bene riferimenti

    ciao.
    Ho una mezza lacuna sui riferimenti , li uso ma mi sono fermato a direrova a scrivere cosa sono , e li' ho capito che non li ho ancora compresi a fondo.sono abituato ad usarli nella dichiarazione dei parametri delle funzioni per far si che i cambiamenti all'interno della funzione persistano anche all ' esterno ad es semplificato:

    codice:
    void change(*p1,*p2)
    {
     *p1=1;
     *p2=2;
    }
    
    main
    {
       int p1,p2;
       p1=p2=0;
    
       change(&p1,&p2)
    //p1=1 ,p2 = 2
    }
    un altro caso in cui si usano i riferimenti è il costruttore di copia:
    codice:
    class Z
    {
    public:
       Z();
       Z(Z& other);  
      
    }
    di cui non riesco bene a capire la sintassi:
    "passa il riferimento di un oggetto gia' esistente di tipo Z" ???
    è cosi?perchè?...
    ho capito il fatto del gia esistente , in quanto questo costruttore serve innanzitutto per fare la deep copy di un oggetto a partire da un altro oggetto dello stesso tipo , e si rende esplicito nei casi non si abbiano oggetti solo con tipi primitivi(come int o char), ad es se ho dei puntatori nella mia classe o delle allocazioni di memoria dinamiche in generale

    un altro caso che non ho capito bene è questo:
    z(Z*& varPar)
    in cui mi avete aiutato gia' abbondantemente su questo forum , ma che non ho ancora assimilato del tutto.

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    un riferimento altro non è che un puntatore ad un oggetto.. es:

    codice:
    int i = 1;
    se ho una funzione che prende in input un int* allora farò così:
    codice:
    void foo(int* intero)
    la chiamerò con:
    codice:
    foo(&i); <- qui passo un riferimento al mio intero alla funzione.. questo riferimento, nella funzione foo, diventa un puntatore al mio intero..
    il costruttore di copia si comporta proprio al contrario..
    si aspetta un riferimento per non averne una copia locale (un oggetto passato per valore viene copiato localmente alla funzione e non viene modificato)

    quindi:
    codice:
    oggetto(const oggetto& o); <- costruttore di copia
    chiamato con:
    codice:
    oggetto ogg(o); <- "o" è un oggetto esistente
    però attenzione queste cose dovresti studiartele meglio sul/sui libro/i

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    z(Z*& varPar)
    vediamo se ricordo il trucco per vapire meglio queste cose:

    prendi il nome e salta a destra e a sinistra switchando di uno per capirne il tipo
    nel tuo esempio:

    varPar è, vado a sinistra di 1
    un riferimento (&), ora a destra ma non c'è nulla quindi di nuovo a sinistra
    ad un puntatore (*), ora di nuova a sx perchè a dx non c'è nulla
    a Z

    molto utile quando hai puntatori ad arry costanti ecc...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.