C++ Örnekle 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. yerini ve boyutlarını gösterir. Bu açıklamalardan bir ev inşa edebiliriz. Ev nesne olur. Prototipten birçok ev oluşturmak mümkündür. Ayrıca, bir sınıftan birçok nesne oluşturmak mümkündür.
Yukarıdaki şekilde tek bir ev prototipimiz var. Bu prototipten farklı özelliklere sahip iki ev oluşturduk.
Sınıf Beyanı
C+'da bir sınıf, class anahtar sözcüğü kullanılarak tanımlanır. Bunu sınıf adı takip etmelidir. Daha sonra sınıf gövdesi küme parantezleri { } arasına eklenir.
Sözdizimi
class class-name { // data // functions };
- Sınıf adı, sınıfa atanacak addır.
- Veriler, normalde değişkenler olarak bildirilen sınıfa ait verilerdir.
- Fonksiyonlar sınıf fonksiyonlarıdır.
Ö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.
Nesne Tanımı
Nesneler sınıflardan oluşturulur. Sınıf nesneleri, değişkenlerin bildirilmesine benzer şekilde bildirilir. Sınıf adı başlamalı ve ardından nesne adı gelmelidir. Sınıf türünün nesnesi.
Sözdizimi
class-name object-name;
- Sınıf adı, bir nesnenin oluşturulacağı sınıfın adıdır.
- Nesne adı, yeni nesneye atanacak addır.
Bir sınıftan bir nesne oluşturmanın bu işlemi, örnekleme olarak bilinir.
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ı:
İşte kodun ekran görüntüsü:
Kod Açıklama:
- Fonksiyonlarını kullanabilmek için iostream başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza dahil etmek.
- Phone adında bir sınıf bildirin.
- Oluşturmak üzere olduğumuz değişkenleri herkese açık olarak işaretlemek için genel erişim değiştiricisini kullanmak.
- Double veri tipinin değişken maliyetini tanımlayın.
- Slots adında bir tamsayı değişkeni bildirin.
- Sınıf gövdesinin sonu.
- Main() fonksiyonunun çağrılması. Program mantığı kendi bünyesinde eklenmelidir.
- Telefon türünde Y6 adında bir nesne oluşturun. Buna örnekleme denir.
- Telefon türünde Y7 adında bir nesne oluşturun. Buna örnekleme denir.
- 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ı.
- 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.
- 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ı.
- 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.
- Y6'nın maliyetini diğer metinlerle birlikte konsola yazdırın.
- Y7'nın maliyetini diğer metinlerle birlikte konsola yazdırın.
- Diğer metnin yanında Y6 için yuva sayısını yazdırın.
- Diğer metnin yanında Y7 için yuva sayısını yazdırın.
- Program başarılı bir şekilde tamamlandığında bir değer döndürmelidir.
- main() işlevinin gövdesinin sonu.
Ö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.
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 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ı:
İşte kodun ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- ClassA adında bir sınıf oluşturun.
- Oluşturulacak sınıf üyesini herkese açık olarak işaretlemek için genel erişim değiştiricisini kullanın.
- Bir val tamsayı değerini alan set_a() adlı işlevi oluşturun.
- get_a() adında bir işlev oluşturun.
- Oluşturulacak sınıf üyesini özel olarak erişilebilir olarak işaretlemek için özel erişim değiştiricisini kullanın.
- a adında bir tamsayı değişkeni bildirin.
- Sınıf gövdesinin sonu.
- 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.
- get_a() işlevi çağrıldığında a değişkeninin değerini döndürmelidir.
- get_a() fonksiyonunun tanımının sonu.
- 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.
- Val değişkeninin değerinin a değişkenine atanması.
- set_a() fonksiyonunun tanımının sonu.
- main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
- ClassA'nın bir örneğini oluşturun ve ona a adını verin.
- a değişkenine 20 değerini atamak için yukarıdaki sınıf örneğini ve set_a() işlevini kullanın.
- 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.
- Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
- main() fonksiyonunun gövdesinin sonu.
Ö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ı:
İşte kodun ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- ParentClass adlı bir sınıf oluşturun.
- Oluşturulacak sınıf üyesini korumalı olarak işaretlemek için korumalı erişim değiştiricisini kullanın.
- Değer adında bir tamsayı değişkeni oluşturun.
- Sınıf gövdesinin sonu.
- ParentClass'ı devralan ChildClass adında yeni bir sınıf oluşturun.
- 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.
- Bir x tamsayı değerini alan setId() adlı işlevi oluşturun.
- X değişkeninin değerini değişken değerine atamak.
- setId() fonksiyonunun tanımının sonu.
- displayValue() adında bir işlev oluşturun.
- Value adlı değişkenin değerini diğer metinle birlikte konsola yazdırın.
- displayValue() işlevinin gövdesinin sonu.
- ChildClass adlı sınıfın gövdesinin sonu.
- main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
- ChildClass'ın bir örneğini oluşturun ve ona c adını verin.
- X değişkenine 21 değerini atamak için yukarıdaki sınıf örneğini ve setId() işlevini kullanın.
- displayValue() adlı işlevi çağırmak için yukarıdaki sınıf örneğini kullanın.
- Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
- main() fonksiyonunun gövdesinin sonu.
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 2
#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ı:
İşte kodun ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için iostream başlık dosyasını programımıza ekleyin.
- Fonksiyonlarını kullanmak için string başlık dosyasını programımıza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- Guru99 adında bir sınıf oluşturun.
- Oluşturmak üzere olduğumuz sınıf üyelerini herkese açık olarak işaretlemek için genel erişim değiştiricisini kullanın.
- öğretici_adı adlı bir dize değişkeni oluşturun.
- Kimlik adında bir tamsayı değişkeni oluşturun.
- printname() adında bir işlev oluşturun. Bu işlev sınıf tanımında tanımlanmamıştır.
- Basılı() adında bir işlev oluşturun. Bu fonksiyon sınıf tanımı içerisinde tanımlanmıştır. Gövdesi sınıf tanımına eklenmiştir.
- 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.
- printid() işlevinin gövdesinin sonu.
- Guru99 sınıfının gövdesinin sonu.
- printname() fonksiyonunun tanımının başlangıcı.
- Öğ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.
- printname() fonksiyonunun tanımının sonu.
- main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
- Guru99 sınıfının bir örneğini oluşturun ve ona guru99 adını verin.
- Bir değer atamak için yukarıdaki örneği kullanın. C++ öğretici_adı değişkenine.
- id değişkenine 99 değerini atamak için guru1001 örneğini kullanın.
- printname() işlevini çağırmak için guru99 örneğini kullanın.
- Konsolda yeni bir boş satır yazdırmak için end (bitiş çizgisi) komutunu çağırın.
- printid() fonksiyonunu çağırmak için guru99 örneğini kullanın.
- Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
- main() işlevinin gövdesinin sonu.
Yapıcılar ve Yıkıcılar
Yapıcılar Nedir?
Yapılar, nesneleri başlatan özel işlevlerdir. C++ derleyiciler Bir nesne oluştururken yapıcıyı çağırır. Yapıcılar sınıf üyelerine değer atamaya yardımcı olur. Elbette bu, onlara bir miktar hafıza alanı tahsis edildikten sonra gerçekleşir.
Yıkıcılar 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 3
#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ı:
İşte kodun ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için iostream başlık dosyasını koda ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- ClassA adında bir sınıf oluşturun.
- Oluşturmak üzere olduğumuz üyeyi herkese açık olarak işaretlemek için genel erişim değiştiricisini kullanın.
- Sınıf için bir kurucu oluşturun.
- 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.
- Sınıf yapıcısının gövdesinin sonu.
- Sınıf için bir yıkıcı oluşturun.
- 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.
- Yıkıcının gövdesinin sonu.
- Sınıf gövdesinin sonu.
- main() fonksiyonunu çağırın. Program mantığı bu fonksiyonun gövdesine eklenmelidir.
- Bir sınıf nesnesi oluşturun ve ona a adını verin. Yapıcı çağrılacak.
- p adında bir tamsayı değişkeni oluşturun ve ona 1 değerini atayın.
- p değişkenini kullanarak bir if ifadesi bloğu oluşturun.
- Bir sınıf nesnesi oluşturun ve ona b adını verin. Yıkıcı çağrılacak.
- If ifadesinin gövdesinin sonu.
- Main() işlevinin gövdesinin sonu.
ÖZET
- C++ nesne yönelimlidir.
- Sınıflar temel özelliklerini oluşturur C++ bu onu nesne odaklı yapar.
- A C++ sınıf, verileri ve verileri işlemek için yöntemleri bir araya getirir.
- Sınıf, bir nesnenin planıdır.
- Sınıflar bir nesnenin biçimini belirler.
- Bir sınıfın içerdiği veri ve yöntemlere sınıf üyeleri denir.
- Sınıf üyelerine erişmek için sınıfın bir örneğini kullanmalısınız.
- Bir sınıf oluşturmak için class anahtar sözcüğünü kullanırız.
- Sınıf üyesi işlevler bir sınıfın içinde veya dışında tanımlanabilir.