PDA

Tam Sürümünü Görmek İçin : veri uyesi referans


quasimodo
09/05/2007, 12:05
Bir class a veri uyesi olarak referans yazdigimizda
bunun neye referans oldugunun ilk degerini nasil verebiliyoruz?


lektroon
09/05/2007, 15:01
Class'in constructor'inda member initializer list'inde atama yapilmali.

class C
{
int &ref;
int x;
public:
C():ref(x){x = 0;}
};

acehreli
09/05/2007, 21:00
Dogru tabii ama normalde referans yapilacak sey disaridan verilir:

C(int & r) : ref(r) {/* ... */};

Ali

quasimodo
10/05/2007, 14:42
Referans gostermeyi disaridan yaptigimizda
class private uyesine disaridan erisebiliyoruz degilmi?

acehreli
10/05/2007, 19:54
Hayir, senin soyledigin yapmak icin bu sinifin referans dOndUren bir islevinin olmasi gerekir.

Kurucuya gonderilen bir referans ise, genelde bir sinifin isini o gosterilen nesneyi kullanarak yapmasi icin kullanilir. Asagidaki ornekte hep 'int' kullaniyoruz ama normalde daha karmasik siniflar gonderilir.

Ornegin bir ag baglantisini temsil eden bir nesneyi bir ag uzerinden islem yapan bir sinifin kurucusuna gonderebiliriz. O zaman o islem yapan sinifa soyle demis gibi oluruz: "isini yaparken bu baglanti nesnesini kullan."


class C
{
int ozel_;
int & disaridakineReferans_;

public:

C(int & disaridan)
:
ozel_(1),
disaridakineReferans_(disaridan)
{}

/*
* Bu, sarmayi (encapsulation) deldigi icin her zaman
* onerilmez. Sadece ornek olarak veriyorum.
*/
int & ozeleEris()
{
return ozel_;
}

void birIsYap()
{
if (disaridakineReferans_ == 42) {
/* ... */
}
}
};

int main()
{
int maineAitNesne = 42;

C c(maineAitNesne);

// ozel nesneyi degistiriyorum! Onerilmez...
c.ozeleEris() = 2;

// Bu isini yaparken disaridan gosterilen nesneyi kullanir
c.birIsYap();
}


Ali