[ azzpoz @ 09.01.2014. 14:25 ] @
Code:
#include <exception>

exception(const char* const & ) ;   // za kreiranje takvok exception-a, možemo poslati nesto poput ovoga unutar zagrade


Interesuje me opcenito znacenje za const i parametre unutar zagrade exception???

const & je konstantna referenca, i const char* je konstantni pokazivac

Da li mi SAMO osiguravamo da nece dolaziti do promjena za parametar koji prihvati funkcija???
[ Goran Arandjelovic @ 09.01.2014. 14:50 ] @
Citat:
azzpoz
Code:
#include <exception>

exception(const char* const & ) ;   // za kreiranje takvok exception-a, možemo poslati nesto poput ovoga unutar zagrade


Interesuje me opcenito znacenje za const i parametre unutar zagrade exception???

const & je konstantna referenca, i const char* je konstantni pokazivac

Da li mi SAMO osiguravamo da nece dolaziti do promjena za parametar koji prihvati funkcija???


Code:

T objekat;
T const & referenca = objekat;


referenca je po definiciji konstantna, jer kada se jednom inicijalizuje da referiše na neki objekat, ne može kasnije da pokazuje na drugi objekat. Dakle, ne postoji "nekonstantna referenca". Referenca je uvek konstantna.
U ovom primeru kažemo da referenca referiše na objekat koji je konstantan. Laički rečeno, kada koristiš ovu referencu iz primera, isto je kao kad bi koristio direktno objekat koji je deklarisan kao: const T objekat;

U tvom primeru:
Code:

exception(const char* const & ref)
{
  // ref je referenca na [b]konstantan[/b] pokazivač (koji pokazuje na [i]const char[/i]
  
  const char *x = "pera";
  // ref = x; // baš zato što je konstantan pokazivač, ovo ne možeš da uradiš
}


Kad bi bilo ovako:
Code:

exception(const char* & ref)
{
  // ref je referenca na [b]nekonstantan[/b] pokazivač (koji pokazuje na [i]const char[/i]
  
  const char *x = "pera";
  // ref = x; // ovo bi bilo dozvoljeno!
}


I na kraju, u oba prethodna slučaja ovo ne bi bilo dozvoljeno:
Code:

ref[0] = 'a'; // ref je referenca na (ne)konstantan pokazivač, a on pokazuje na [b]const char[/b], tj. ref[0] je const char.


Nadam se da je malo jasnije.
Pozdrav.
[ azzpoz @ 09.01.2014. 20:37 ] @
Uspio sam riješiti neke nedoumice, ali me interesuje, zašto bi smo koristili REFERENCU na pokazivac???

[Ovu poruku je menjao azzpoz dana 10.01.2014. u 13:24 GMT+1]
[ azzpoz @ 10.01.2014. 12:39 ] @
Code:
#include <iostream>
using namespace std;

class omr
{
      
public:
       char *naziv;
       omr(char *_n)
       {
                naziv = new char[strlen(_n)+1];
                strcpy(naziv, _n);
       }
       ~omr(){delete []naziv; naziv = NULL;}
};
void proba(const omr* const  &obj)
{
     cout << obj->naziv;
    cout << "\n adresa: " << &obj << endl;;
     
}

void bezRef(const omr* const  obj)
{
     cout << obj->naziv;
    cout << "\n adresa: " << &obj << endl;;
     
}

int main()
{
    omr *Ja = new omr("Elite");
    cout << "\n Adresa Ja: " << &Ja << endl;
    
    proba(Ja);
    proba(Ja);
    
    
    bezRef(Jla);
    bezRef(Ja);
    
system("pause>0"); return 0;
}



Zasto je u funkciji s referencom uvijek promjena adrese na koju pokazuje???


Uspio sam riješiti neke nedoumice, ali me interesuje, zašto bi smo koristili REFERENCU na pokazivac, da li je to oznaka da smo na mjestu ORIGINALNOG pokazivaca, tj. da ne koristimo neki privremeni pokazivac na niz, objekat i sl???

[Ovu poruku je menjao azzpoz dana 10.01.2014. u 15:39 GMT+1]
[ azzpoz @ 11.01.2014. 15:40 ] @
Uspješno sam riješio nekoliko nedoumica i mislim da sam ih razumio, trenutno, dovoljno.

Hvala