07 OCAK 2018
PAZARTESİ
19.25
C++ ile OOP - GET ve SET Metotları

Get ve Set, isimlerinden de anlaşılacağı üzere veri atama ve veriyi çekmek için kullanılan metotlardır. Bu metotlar herhangi bir kütüphane ile ekli olarak gelmezler. Yazdığımız her bir öğe için get ve set'i kendimiz bir metot olarak yazmalıyız.

Get ve Set Neden Kullanılır?

Bir class veya struct içerisinde private olarak oluşturulan bir öğeye o class veya struct dışından erişmek mümkün değildir. Eğer farklı bir alandan private veriye ulaşmak veya değiştirmek istiyorsak get ve set metotlarını yazmalıyız.

Veri Atamak = Set

class SinifAdi{
	int x;
	public:
		void setX(int x2) {
			x = x2;
		}
};

Veriye Erişmek = Get

class SinifAdi{
	int x;
	public:
		int getX() {
			return x;
		}
};

Erişim ?

Mantıken sınıfların varsayılan private olarak geldiğini buradaki konumuzda öğrenmiştik. O zaman yukarıdaki 2 sınıfımızda da x değişkenimiz private olarak atanmış durumda. Bir private öğeye bulunduğu class dışından erişmek ve değeri alıp, değiştirmek mümkün değildir. O halde düzenleme yapacağımız class içerisinde public alanımıza yazdığımız get ve set metotları ile o x değerine erişebiliyoruz. O zaman getX() adında oluşturduğumuz metodumuz bize x değerini return edebilir. Aynı şekilde setX() metodumuzda içerisine aldığı değeri x'e atayabilir.

Main alanımızı bir inceleyelim;

int main(){
	SinifAdi A;
	A.x= 10; // Problem var! (x->PRIVATE, sınıf dışında değer atanamaz!)
	cout << A.x; // Problem var! (x->PRIVATE, sınıf dışında çağırılamaz!)
}

Ama yazdığımız get ve set metotlarını kullanırsak;

int main(){
	SinifAdi A;
	A.setX(10); // Problem Yok (setX() metodu PUBLIC)
	cout << A.getX(); // Problem Yok (getX() metodu PUBLIC)
}

Dikkat Edilmesi Gerek

Eğer public bir değişkene farklı bir class veya struct üzerinden değer atamak istiyorsak şöyle bir kullanım sergileyebiliriz;

int main(){
	sinif Mert;
	Mert.x = 10;
}

Ama eğer bir metot oluşturmuşsak (ki zaten setX() bir metot) eşitlik söz konusu değildir;

int main(){
	sinif Mert;
	Mert.setX(10);
}

Farklı İsimler

get ve set dışında farklı isimlerde verebilirsiniz. Lakin anlaşılması açısından bu tarz kullanım yaygındır. Kodu farklı kişiler incelediğinde rahatlıkla anlayabilir.

class SinifAdi{
	int x;
	public:
		void xDegeriniDegistir(int x2) {
			x = x2;
		}
		int xDegeriniAl() {
			return x;
		}
};

int main(){
	SinifAdi Mert;
	Mert.xDegeriniDegistir(25);
	cout << Mert.xDegeriniAl();
}

Yukarıdaki kod blogumuzda problemsiz çalışır.

set() Metodunda Aynı İsim (this kullanımı)

setX() adı ile oluşturduğumuz yukardaki metotlarımızda farkettiğiniz üzere aldığı parametreyi x2 olarak tabir etmiştik. Peki biz aldığı parametre yerine de x yazarsak nasıl bir şekilde kullanmalıyız? (Sonuçta x=x yapamayız).

İşte tam bu anda karşımıza this çıkıyor. this ibaresi ile ana struct ya da class'taki değişkene ulaşmış oluruz. Şöyle bir setX() metodu da yazabiliriz:

class Sinif{
	int x;
	public:
		void setX(int x) {
			this->x = x;
		}
};
YORUMLAR 1
2
aorhan
19 MAYIS 2019 - 13.50
Sitenizi tesadüfen google'da buldum. 2. üniversite olarak bil. müh. başladım ve anladığım bölümler vardı. Özellikle şimdi öğrendiğim basit ama açıklayıcı anlatım olmayan this kullanımı için öncelikle teşekkür ederim. Bundan sonra sürekli takip edeceğim. Emeğinize sağlık.
CEVAPLA
1
Mert Topuz
21 MAYIS 2019 - 02.03
Değerli düşünceniz ve geri dönüşünüz için çok teşekkürler. 2. üniversiteniz de hayırlı olsun, umarım problemsiz ve güzel bir dönem olur sizin için. Teşekkürler :)
YORUM BIRAK
Şuanda bu yoruma cevap yazıyorsunuz:
İptal Et