C++ Örnekle Sınıf ve Nesne

⚡ Akıllı Özet

Sınıflar ve nesneler C++ Nesne yönelimli programlamanın temelini oluştururlar; burada bir sınıf, veri ve üye fonksiyonlarının bir şablonunu tanımlar ve bir nesne, bu şablondan oluşturulan somut bir örnektir.

  • 🔷 Ders planı: A C++ Bu sınıf, veri üyelerini ve üye fonksiyonlarını kullanıcı tanımlı tek bir türde bir araya getirir.
  • 🔑 Erişim değiştiriciler: Özel, genel ve korumalı anahtar kelimeler, sınıf üyelerine nereden erişilebileceğini kontrol eder.
  • 🧱 Nesne örneği oluşturma: Bir sınıftan nesne oluşturmak için sınıf-adı-nesne-adı sözdizimi kullanılır.
  • 👉 Üye erişimi: Nokta operatörü herkese açık üyelere erişirken, üye fonksiyonları depolanmış verileri işler.
  • ⚙️ Yapıcılar: Yapıcılar nesneleri otomatik olarak başlatır ve yıkıcılar nesneler kapsam dışına çıktığında onları serbest bırakır.
  • 🤖 Yapay zeka yardımı: GitHub Copilot ve benzeri yapay zeka asistanları, kısa bir yorumdan sınıf tanımları ve yapıcılar oluşturur.

C++ Sınıf ve Nesne

Sınıf Nedir?

A C++ sınıf, verileri ve verileri işlemek için yöntemleri bir araya getirir. Sınıflar aynı zamanda nesnelerin biçimlerini de belirler. Bir sınıfın içerdiği veri ve yöntemlere sınıf üyeleri denir. Sınıf, kullanıcı tanımlı bir veri türüdür. Sınıf üyelerine erişmek için sınıfın bir örneğini kullanırız. Bir sınıfı bir nesnenin planı olarak görebilirsiniz.

Bir sınıf, bir evin prototipi olabilir. Kapıların, pencerelerin, zeminlerin vb. konumlarını ve boyutlarını gösterir. Bu tanımlamalardan yola çıkarak bir ev inşa edebiliriz. Ev, nesne haline gelir. Prototipten birçok ev oluşturmak mümkündür. Ayrıca, bir sınıftan birçok nesne oluşturmak da mümkündür.

C++ Nesneler için bir şablon görevi gören sınıf

Yukarıdaki şekilde tek bir ev prototipimiz var. Bu prototipten farklı özelliklere sahip iki ev oluşturduk.

Bir sınıfı bir şablon olarak düşünme fikrinden yola çıkarak, bir sınıfın kodda nasıl tanımlandığını görmek bir sonraki adımdır.

Sınıf Beyanı

In C++Bir sınıf, `class` anahtar kelimesi kullanılarak tanımlanır. Bunu sınıf adı takip etmelidir. Sınıf gövdesi daha sonra süslü parantezler { } arasına eklenir.

Sözdizimi

class class-name
   {
   // data
   // functions
   };
  • MKS sınıf adı Bu, sınıfa atanacak isimdir.
  • MKS veri Bu, genellikle değişken olarak tanımlanan sınıfın verileridir.
  • MKS fonksiyonlar Bunlar sınıf fonksiyonlarıdır.

Sınıf adını ve gövdesini tanımlamak doğal olarak her bir üyenin kimler tarafından kullanılabileceği sorusunu gündeme getirir.

Özel ve Genel Anahtar Kelimeler

Bu iki anahtar kelimeyle karşılaşmış olmalısınız. Bunlar erişim değiştiricilerdir.

Özel:

Özel anahtar kelime bir işlevi veya sınıfı tanımlamak için kullanıldığında özel olur. Bunlara yalnızca sınıf içinden erişilebilir.

Halka açık:

Public anahtar sözcüğü ise verileri/işlevleri herkese açık hale getirir. Bunlara sınıfın dışından erişilebilir.

Bir sınıf oluşturulduktan sonra, tıpkı veri türünden değişkenler oluşturulduğu gibi, bu sınıftan nesneler oluşturulabilir.

Nesne Tanımı

Nesneler sınıflardan oluşturulur. Sınıf nesneleri, değişkenlerin tanımlanmasına benzer şekilde tanımlanır. Önce sınıf adı, ardından nesne adı gelmelidir. Nesne, sınıf türündedir.

Sözdizimi

class-name object-name;
  • MKS sınıf adı Nesnenin oluşturulacağı sınıfın adıdır.
  • MKS nesne adı Bu, yeni nesneye verilecek isimdir.

Bir sınıftan bir nesne oluşturmanın bu işlemi, örnekleme olarak bilinir.

Bir nesne oluşturulduktan sonra, genel üyelerine basit bir operatör aracılığıyla doğrudan erişilebilir.

Veri Üyelerine Erişim

Bir sınıfın public üyelerine erişmek için (.)nokta operatörünü kullanırız. Bunlar genel erişim değiştiriciyle işaretlenmiş üyelerdir.

Örnek 1

#include <iostream>
using namespace std;
class Phone {
public:
	double cost;   
	int slots; 
};
int main() {
	Phone Y6;        
	Phone Y7;        

	Y6.cost = 100.0;
	Y6.slots = 2;

	Y7.cost = 200.0;
	Y7.slots = 2;
	cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
	cout << "Cost of Huawei Y7 : " << Y7.cost << endl;

	cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
	cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;

	return 0;
}

Çıktı:

C++ Herkese açık veri üyelerine erişim Örnek 1 çıktısı

İşte kodun ekran görüntüsü:

C++ Herkese açık veri üyelerine erişim Örnek 1 kodu

Code Açıklama:

  1. Fonksiyonlarını kullanabilmek için iostream başlık dosyasını kodumuza ekleyin.
  2. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza dahil etmek.
  3. Phone adında bir sınıf bildirin.
  4. Oluşturmak üzere olduğumuz değişkenleri herkese açık olarak işaretlemek için genel erişim değiştiricisini kullanmak.
  5. Double veri tipinin değişken maliyetini tanımlayın.
  6. Slots adında bir tamsayı değişkeni bildirin.
  7. Sınıf gövdesinin sonu.
  8. Main() fonksiyonunun çağrılması. Program mantığı kendi bünyesinde eklenmelidir.
  9. Telefon türünde Y6 adında bir nesne oluşturun. Buna örnekleme denir.
  10. Telefon türünde Y7 adında bir nesne oluşturun. Buna örnekleme denir.
  11. Y6 nesnesini kullanarak Phone sınıfının değişken/üye maliyetine erişin. Değer 100.0 olarak ayarlandı. Y6'nın maliyeti artık 100.0 olarak ayarlandı.
  12. Y6 nesnesini kullanarak Phone sınıfının değişken/üye yuvalarına erişin. Değer 2'ye ayarlanmıştır. Y6'nın yuvaları artık 2'ye ayarlanmıştır.
  13. Y7 nesnesini kullanarak Phone sınıfının değişken/üye maliyetine erişin. Değer 200.0 olarak ayarlandı. Y7'nın maliyeti artık 200.0 olarak ayarlandı.
  14. Y7 nesnesini kullanarak Phone sınıfının değişken/üye yuvalarına erişin. Değer 2'ye ayarlanmıştır. Y7'nın yuvaları artık 2'ye ayarlanmıştır.
  15. Y6'nın maliyetini diğer metinlerle birlikte konsola yazdırın.
  16. Y7'nın maliyetini diğer metinlerle birlikte konsola yazdırın.
  17. Diğer metnin yanında Y6 için yuva sayısını yazdırın.
  18. Diğer metnin yanında Y7 için yuva sayısını yazdırın.
  19. Program başarılı bir şekilde tamamlandığında bir değer döndürmelidir.
  20. main() işlevinin gövdesinin sonu.

Herkese açık üyelere dış kod erişimi mümkündür, ancak özel üyelere erişim konusunda çok daha katı kurallar uygulanır.

Özel Ders Nedir?

Özel olarak işaretlenen sınıf üyelerine yalnızca sınıf içinde tanımlanan işlevlerle erişilebilir. Sınıfın dışında tanımlanan hiçbir nesne veya işlev bu tür üyelere doğrudan erişemez. Özel bir sınıf üyesine yalnızca üye ve arkadaş işlevleri tarafından erişilebilir.

Örnek 2

#include <iostream>
using namespace std;
class ClassA {
public:
	void set_a(int val);
	int get_a(void);

private:
	int a;
};
int ClassA::get_a(void) {
	return a;
}
void ClassA::set_a(int val) {
	a = val;
}
int main() {
	ClassA a;
	a.set_a(20); 
	cout << "Value of a is: " << a.get_a(); 
	return 0;
}

Çıktı:

C++ Özel sınıf üyesi Örnek 2 çıktısı

İşte kodun ekran görüntüsü:

C++ Özel sınıf üyesi Örnek 2 kodu

Code Açıklama:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  3. ClassA adında bir sınıf oluşturun.
  4. Oluşturulacak sınıf üyesini herkese açık olarak işaretlemek için genel erişim değiştiricisini kullanın.
  5. Bir val tamsayı değerini alan set_a() adlı işlevi oluşturun.
  6. get_a() adında bir işlev oluşturun.
  7. Oluşturulacak sınıf üyesini özel olarak erişilebilir olarak işaretlemek için özel erişim değiştiricisini kullanın.
  8. a adında bir tamsayı değişkeni bildirin.
  9. Sınıf gövdesinin sonu.
  10. get_a() işlevine erişmek için sınıf adını ve kapsam çözümleme operatörünü kullanın. Fonksiyonun çağrıldığında ne yapacağını tanımlamak istiyoruz.
  11. get_a() işlevi çağrıldığında a değişkeninin değerini döndürmelidir.
  12. get_a() fonksiyonunun tanımının sonu.
  13. set_a() işlevine erişmek için sınıf adını ve kapsam çözümleme operatörünü kullanın. Fonksiyonun çağrıldığında ne yapacağını tanımlamak istiyoruz.
  14. Val değişkeninin değerinin a değişkenine atanması.
  15. set_a() fonksiyonunun tanımının sonu.
  16. main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
  17. ClassA'nın bir örneğini oluşturun ve ona a adını verin.
  18. a değişkenine 20 değerini atamak için yukarıdaki sınıf örneğini ve set_a() işlevini kullanın.
  19. Konsolda a değişkeninin değerinin yanında bazı metinlerin yazdırılması. a değişkeninin değeri get_a() işlevi çağrılarak elde edilir.
  20. Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
  21. main() fonksiyonunun gövdesinin sonu.

Koruma altındaki üyeler, özel ve kamusal alanlar arasında yer alarak miras konusunda önemli bir özellik daha eklerler.

Korunan Sınıf Nedir?

Korumalı olarak işaretlenen sınıf üyeleri, özel olarak işaretlenenlere göre avantajlıdır. Tanımlarının sınıfındaki işlevler tarafından erişilebilirler. Ayrıca türetilmiş sınıflardan da erişilebilir.

Örnek 3

#include <iostream>
using namespace std;
class ParentClass {
protected:
	int value;
};
class ChildClass : public ParentClass {
public:
	void setId(int x) {
		value = x;
	}
	void displayValue() {
	cout << "Value is: " << value << endl;
	}
};
int main() {
	ChildClass c;
	c.setId(21);
	c.displayValue();
	return 0;
}

Çıktı:

C++ korumalı sınıf üyesi Örnek 3 çıktısı

İşte kodun ekran görüntüsü:

C++ korumalı sınıf kalıtımı Örnek 3 kodu

Code Açıklama:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  3. ParentClass adlı bir sınıf oluşturun.
  4. Oluşturulacak sınıf üyesini korumalı olarak işaretlemek için korumalı erişim değiştiricisini kullanın.
  5. Değer adında bir tamsayı değişkeni oluşturun.
  6. Sınıf gövdesinin sonu.
  7. ParentClass'ı devralan ChildClass adında yeni bir sınıf oluşturun.
  8. Oluşturulacak sınıf üyesini alt sınıflar tarafından erişilebilir olarak işaretlemek için korumalı erişim değiştiricisini kullanın.
  9. Bir x tamsayı değerini alan setId() adlı işlevi oluşturun.
  10. X değişkeninin değerini değişken değerine atamak.
  11. setId() fonksiyonunun tanımının sonu.
  12. displayValue() adında bir işlev oluşturun.
  13. Value adlı değişkenin değerini diğer metinle birlikte konsola yazdırın.
  14. displayValue() işlevinin gövdesinin sonu.
  15. ChildClass adlı sınıfın gövdesinin sonu.
  16. main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
  17. ChildClass'ın bir örneğini oluşturun ve ona c adını verin.
  18. X değişkenine 21 değerini atamak için yukarıdaki sınıf örneğini ve setId() işlevini kullanın.
  19. displayValue() adlı işlevi çağırmak için yukarıdaki sınıf örneğini kullanın.
  20. Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
  21. main() fonksiyonunun gövdesinin sonu.

Bir sınıf, verileri depolamanın yanı sıra, bu veriler üzerinde işlem yapan işlevleri de bir araya getirir.

Sınıf Üyesi İşlevleri

Fonksiyonlar verileri manipüle etmemize yardımcı olur. Sınıf üyesi işlevleri iki şekilde tanımlanabilir:

  • Sınıf tanımının içinde
  • Sınıf tanımının dışında

Eğer bir fonksiyon sınıf tanımı dışında tanımlanacaksa kapsam çözümleme operatörünü (::) kullanmalıyız. Buna sınıf ve işlev adları eşlik etmelidir.

Örnek 4

#include <iostream>
#include <string>
using namespace std;
class Guru99
{
public:
	string tutorial_name;
	int id;
	void printname();
	void printid()
	{
		cout << "Tutorial id is: "<< id;
	}
};
void Guru99::printname()
{
	cout << "Tutorial name is: " << tutorial_name;
}
int main() {
	Guru99 guru99;
	guru99.tutorial_name = "C++";
	guru99.id = 1001;
	guru99.printname();
	cout << endl;
	guru99.printid();
	return 0;
}

Çıktı:

C++ Sınıf üye fonksiyonları Örnek 4 çıktısı

İşte kodun ekran görüntüsü:

C++ Sınıf üye fonksiyonları Örnek 4 kodu

Code Açıklama:

  1. İşlevlerini kullanmak için iostream başlık dosyasını programımıza ekleyin.
  2. Fonksiyonlarını kullanmak için string başlık dosyasını programımıza ekleyin.
  3. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  4. Adlı bir sınıf oluşturun Guru99
  5. Oluşturacağımız sınıf üyelerini herkese açık erişime sahip olacak şekilde işaretlemek için `public` erişim değiştiricisini kullanın.
  6. öğretici_adı adlı bir dize değişkeni oluşturun.
  7. Kimlik adında bir tamsayı değişkeni oluşturun.
  8. printname() adında bir işlev oluşturun. Bu işlev sınıf tanımında tanımlanmamıştır.
  9. printid() adında bir fonksiyon oluşturun. Bu fonksiyon sınıf tanımı içinde tanımlanmıştır. Fonksiyonun gövdesi de sınıf tanımı içine eklenmiştir.
  10. Kimlik değişkeninin değerini konsoldaki diğer metinlerin yanında yazdırın. Bunun printid() işlevinin gövdesine eklendiğini unutmayın. Yalnızca printid() işlevi çağrıldığında yürütülür.
  11. printid() işlevinin gövdesinin sonu.
  12. Dersin ana bölümünün sonu Guru99
  13. printname() fonksiyonunun tanımının başlangıcı.
  14. Öğretici_adı değişkeninin değerini konsolda diğer metnin yanında yazdırın. Bunun printname() işlevinin gövdesine eklendiğini unutmayın. Yalnızca printname() işlevi çağrıldığında yürütülür.
  15. printname() fonksiyonunun tanımının sonu.
  16. main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
  17. Sınıfın bir örneğini oluşturun. Guru99 ve ona guru99 adını verdi.
  18. Bir değer atamak için yukarıdaki örneği kullanın. C++ öğretici_adı değişkenine.
  19. id değişkenine 99 değerini atamak için guru1001 örneğini kullanın.
  20. printname() işlevini çağırmak için guru99 örneğini kullanın.
  21. Konsolda yeni bir boş satır yazdırmak için end (bitiş çizgisi) komutunu çağırın.
  22. printid() fonksiyonunu çağırmak için guru99 örneğini kullanın.
  23. Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
  24. main() işlevinin gövdesinin sonu.

Nesne oluşturulduğunda ve yok edildiğinde otomatik olarak çalışan iki özel üye fonksiyonu bulunur.

Yapıcılar ve Yıkıcılar

Yapıcı nedir?

Yapıcılar, nesneleri başlatan özel fonksiyonlardır. C++ derleyiciler Bir nesne oluştururken bir kurucu fonksiyon çağırın. Kurucu fonksiyonlar, sınıf üyelerine değer atamaya yardımcı olur. Elbette, bu işlem öncelikle onlara bir miktar bellek alanı tahsis edildikten sonra gerçekleşir.

Yıkıcı nedir?

Yıkıcılar ise sınıf nesnelerinin yok edilmesine yardımcı olur.

Yapıcı adı sınıf adına benzer olmalıdır. Yapıcıların dönüş türü yoktur.

Yapıcı sınıf gövdesinin içinde veya dışında tanımlanabilir. Sınıf gövdesi dışında tanımlanmışsa, sınıf adı ve kapsam çözümleme operatörü (::) ile tanımlanmalıdır.

Örnek 5

#include <iostream>  
using namespace std;
class ClassA {
public:
	ClassA() {
		cout << "Class constructor called"<<endl;
	}
	~ClassA() {
		cout << "Class destructor called"<<endl;
	}
};

int main() {
	ClassA a;
	int p = 1;
		if (p) {
			ClassA b; 
		}   
}

Çıktı:

C++ yapıcı ve yıkıcı Örnek 5 çıktısı

İşte kodun ekran görüntüsü:

C++ Yapıcı ve yıkıcı fonksiyon Örnek 5 kodu

Code Açıklama:

  1. İşlevlerini kullanmak için iostream başlık dosyasını koda ekleyin.
  2. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
  3. ClassA adında bir sınıf oluşturun.
  4. Oluşturmak üzere olduğumuz üyeyi herkese açık olarak işaretlemek için genel erişim değiştiricisini kullanın.
  5. Sınıf için bir kurucu oluşturun.
  6. Yapıcı çağrıldığında konsolda yazdırılacak metin. Sonu bir C++ bitiş çizgisi anlamına gelen anahtar kelime. Fare imlecini bir sonraki satıra taşır.
  7. Sınıf yapıcısının gövdesinin sonu.
  8. Sınıf için bir yıkıcı oluşturun.
  9. Yıkıcı çağrıldığında konsolda yazdırılacak metin. Sonu bir C++ bitiş çizgisi anlamına gelen anahtar kelime. Fare imlecini bir sonraki satıra taşır.
  10. Yıkıcının gövdesinin sonu.
  11. Sınıf gövdesinin sonu.
  12. main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
  13. Bir sınıf nesnesi oluşturun ve ona a adını verin. Yapıcı çağrılacak.
  14. p adında bir tamsayı değişkeni oluşturun ve ona 1 değerini atayın.
  15. p değişkenini kullanarak bir if ifadesi bloğu oluşturun.
  16. Bir sınıf nesnesi oluşturun ve ona b adını verin. Yıkıcı çağrılacak.
  17. If ifadesinin gövdesinin sonu.
  18. Main() işlevinin gövdesinin sonu.

SSS

Bir sınıf, veri üyelerini ve üye fonksiyonlarını tek bir türde gruplandıran, kullanıcı tanımlı bir şablondur. Bir nesne ise bu sınıftan oluşturulan somut bir örnektir ve şablon tarafından tanımlanan verilerin kendi kopyasını içerir.

Temel fark varsayılan erişimdir: bir sınıfın üyeleri varsayılan olarak özeldir, oysa bir sınıfın üyeleri yapı Varsayılan olarak herkese açıktırlar. Her ikisi de kalıtımı, kurucuları ve kapsüllemeyi destekler. C++.

C++ Üç yaygın kurucu türünü destekler: argüman almayan varsayılan bir kurucu, üyeleri başlatmak için değerler kabul eden parametreli bir kurucu ve aynı sınıfa ait mevcut bir nesneden yeni bir nesne oluşturan bir kopyalama kurucusu.

Arkadaş fonksiyonu, bir sınıfın özel ve korumalı üyelerine erişim izni verilen, sınıf üyesi olmayan bir fonksiyondur. Sınıf içinde `friend` anahtar kelimesiyle bildirilir, ancak tanımı sıradan bir fonksiyon gibi sınıf dışında yapılır.

`this` işaretçisi, statik olmayan her üye fonksiyonunun içinde kullanılabilen örtük bir işaretçidir. Fonksiyonu çağıran nesneye işaret eder ve kodun o nesnenin kendi üyelerine başvurmasına ve parametreler ile veri üyeleri arasındaki adlandırma çakışmalarını çözmesine olanak tanır.

Kapsülleme, verileri ve üzerinde çalışan fonksiyonları tek bir sınıf içinde bir araya getirir ve ardından özel üyeler kullanarak iç ayrıntıları gizler. Genel üye fonksiyonları, kontrollü bir arayüz sunarak verileri kazara veya yetkisiz erişimden korur.

Evet. Yapay zekâ kodlama asistanları, kısa bir komut veya yorumu, veri üyeleri, erişim belirleyicileri, kurucular ve üye fonksiyonları da dahil olmak üzere çalışan sınıf tanımlarına dönüştürür. Kodu derlemeden önce oluşturulan erişim seviyelerini ve başlatma mantığını her zaman gözden geçirin.

Evet. GitHub Yardımcı Pilotu Yazarken sınıf bildirimlerini, kurucuları, getter'ları ve setter'ları önerir. Tekrarlayan şablon kodlarını hızlıca halleder, ancak derlemeden önce üye erişimini, kurucu mantığını ve nesne kullanımını yine de doğrulamanız gerekir.

Bu yazıyı şu şekilde özetleyin: