CPP 044 – Access Specifiers

Sınıfımızdaki değişken ve fonksiyonların görünürlülüğünü belirliyor. 3 türdür

  • public: Bu etiketin altında kalanlar sınıf dışından erişilebilir.
  • private: Bu etiketin altında kalanlar sadece sınıfın içinde erişilebilir.
  • protected: Bu etiketin altında kalanlar sınıfın içinde ve miras alan sınıflarda erişilebilir. Fakat dışardan erişilemez.

Default olarak sınıfımızın etiketi private dır

#include <iostream>
using namespace std;

class MyClass {
	int x, y;
};

int main() {
	MyClass mc;
	mc.x; // hata 
}

x ve y private alanda olduğu için 10. satırdaki mc.x; ifadesi hata verecektir.

#include <iostream>
using namespace std;

class MyClass {
public:
	int x{}, y{};

	void acik_fonksiyon() {
		cout << "acik" << endl;
		gizlenen_fonksiyon();
	}
private:

	void gizlenen_fonksiyon() {
		cout << "gizli" << endl; 
	}
};

int main() {
	MyClass mc;
	mc.x; 

	mc.acik_fonksiyon();
	//mc.gizlenen_fonksiyon(); // hata
}

//acik
//gizli

Sınıfı kullanan kişilerin dışardan erişime ihtiyacı olan şeyleri public yapıyoruz. Dışardan müdahale olmamasını istediğimiz şeyleri private yapıyoruz.

  • Etiketlerin sırası ve sayısı önemli değil. İsterseniz 10 kere farklı yerlerde private yazabilirsiniz, ya da public, ya da protected.

class MyClass {
public:
	int x{}, y{};
	
private:

	void gizlenen_fonksiyon() {
		cout << "gizli" << endl; 
	}
	
public:
	void acik_fonksiyon() {
		cout << "acik" << endl;
		gizlenen_fonksiyon();
	}

};

class MyClass {
private:
	void gizlenen_fonksiyon() {
		cout << "gizli" << endl; 
	}
	
public:
	int x{}, y{};	

	void acik_fonksiyon() {
		cout << "acik" << endl;
		gizlenen_fonksiyon();
	}

};

gibi

Sınıf ögelerine erişmek

Şuana kadar sınıfa ait değişken ve fonksiyonlara erişmek için . nokta operatörünü kullandık. Nokta operatörüne benzer şekilde -> arrow operatörümüz var. Aralarındaki tek fark arrow operatörü pointerlarla çalışıyor:

class Person {
public:
	int age; 
	int ID; 

};
int main() {
	Person p1; 
	Person* p2; 

	p1.age = 22;
	p2->age = 22;
}

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *