01
09
C ++ Sınıflarını Başlatma

Nesneler C ++ ve C arasındaki en büyük farktır. C ++ için en eski isimlerden biri de C sınıfıdır.
Sınıflar ve Nesneler
Sınıf, bir nesnenin tanımıdır. Tıpkı bir tür int. Bir sınıf, yapı tek bir farkla: tüm yapı üyeleri varsayılan olarak herkese açıktır. Tüm sınıf üyeleri özeldir.
Unutmayın - bir sınıf bir türdür ve bu sınıfın bir nesnesi değişken.
Bir nesneyi kullanmadan önce yaratılması gerekir. Bir sınıfın en basit tanımı:
sınıf adı {
// üyeler
}
Aşağıdaki bu örnek sınıf basit bir kitap modellemektedir. OOP kullanmak sorunu soyutlamanıza ve sadece keyfi değişkenleri değil, onu düşünmenize izin verir.
// örnek bir
#Dahil etmek
#Dahil etmek
sınıf Kitabı
{
int PageCount;
int CurrentPage;
halka açık:
Kitap (int Sayıları); // Yapıcı
~ Bölgesine () {}; // Yıkıcı
void SetPage (int PageNumber);
int GetCurrentPage (void);
};
Kitap:: Kitap (int NumPages) {
PageCount = NumPages;
}
void Book:: SetPage (int PageNumber) {
CurrentPage = PageNumber;
}
int Kitap:: GetCurrentPage (void) {
CurrentPage döndür;
}
int main () {
Kitap ABook (128);
Kitap. SetPage (56);
std:: cout << "Geçerli Sayfa" << ABook. GetCurrentPage () << std:: endl;
dönüş 0;
}
Tüm kodlar ders kitabı aşağı int Kitap:: GetCurrentPage (void) { işlevi sınıfın bir parçasıdır. ana() fonksiyonu çalıştırılabilir bir uygulama yapmak için vardır.
02
09
Kitap Sınıfını Anlama
İçinde ana() işlevi 128 değeri ile Book türünde bir değişken oluşturulur. Yürütme bu noktaya ulaşır ulaşmaz ABook nesnesi oluşturulur. Bir sonraki satırda yöntem Kitap. Sayfa ayarla() çağrılır ve nesne değişkenine 56 değeri atanır Kitap. Geçerli sayfa. Sonra cout bu değeri, Kitap. GetCurrentPage () yöntem.
İcra, dönüş 0; ABook nesnesine artık uygulama gerekmiyor. Derleyici yıkıcıya bir çağrı oluşturur.
Sınıflandırma
Arasındaki her şey Ders Kitabı ve } sınıf deklarasyonudur. Bu sınıfın her ikisi de int türünde iki özel üyesi vardır. Sınıf üyelerine varsayılan erişim özel olduğu için bunlar özeldir.
halka açık: direktifi derleyici buradan erişen herkese açıktır. Bu olmadan, yine de özel olacak ve main () işlevindeki üç satırın Abook üyelerine erişmesini engelleyecektir. Yorum yazmayı deneyin halka açık: sonra gelen derleme hataları görmek için çıkış ve yeniden derleme.
Aşağıdaki bu satırda bir Oluşturucu açıklanmaktadır. Bu, nesne ilk oluşturulduğunda çağrılan işlevdir.
Kitap (int Sayıları); // Yapıcı
Hattından çağrılır
Kitap ABook (128);
Bu, Kitap türü ABook adında bir nesne oluşturur ve Kitap () işlevini parametre 128.
03
09
Kitap Sınıfı Hakkında Daha Fazla Bilgi
C ++ 'da yapıcı her zaman sınıfla aynı ada sahiptir. Kurucu, nesne oluşturulduğunda çağrılır ve nesneyi başlatmak için kodunuzu koymanız gereken yerdir.
Kitap Inşa edici sonra sonraki satır yıkıcı. Bu, kurucu ile aynı ada sahiptir, ancak önünde ~ (tilde) bulunur. Bir nesnenin imhası sırasında, yıkıcı nesneyi toparlamak ve nesne tarafından kullanılan bellek ve dosya tanıtıcısı gibi kaynakların serbest bırakılmasını sağlamak için çağrılır.
Hatırlamak—Bir xyz sınıfı xyz () yapıcı işlevine ve ~ xyz () yıkıcı işlevine sahiptir. Beyan etmeseniz bile, derleyici bunları sessizce ekleyecektir.
Yıkıcı her zaman nesne sonlandığında çağrılır. Bu örnekte, nesne kapsam dışına çıktığında örtük olarak yok edilir. Bunu görmek için yıkıcı bildirimini şu şekilde değiştirin:
~ Kitap () {std:: cout << "Yıkıcı denir";}; // Yıkıcı
Bu, bildirimde kod içeren satır içi bir işlevdir. Satır içi başka bir yol satır içi kelime eklemektir
satır içi ~ Kitap (); // Yıkıcı
ve yıkıcıyı böyle bir işlev olarak ekleyin.
satır içi Kitap:: ~ Kitap (geçersiz) {
std:: cout << "Yıkıcı çağırdı";
}
Satır içi işlevler, daha verimli kod üretmek için derleyicinin ipucudur. Sadece küçük fonksiyonlar için kullanılmalıdır, ancak uygun yerlerde kullanılırsa - iç kısım gibi döngüler— Performansta önemli bir fark yaratabilir.
04
09
Yazma Sınıfı Yöntemleri
En iyi pratik nesneler için tüm verileri özel yapmak ve bu bilgilere erişimci işlevleri olarak bilinen işlevler aracılığıyla erişmektir. Sayfa ayarla() ve GetCurrentPage () değişkenine erişmek için kullanılan iki fonksiyon Geçerli sayfa.
Değiştir sınıf yapı ve yeniden derleme beyanı. Yine de derleme ve düzgün çalışması gerekir. Şimdi iki değişken Sayfa sayısı ve Geçerli sayfa herkese açıktır. Bu satırı Kitap ABook'tan (128) sonra ekleyin, derlenecektir.
Kitap. Sayfa Sayısı = 9;
Yapıyı tekrar değiştirirseniz sınıf ve yeniden derleyin, bu yeni satır artık Sayfa sayısı şimdi tekrar özel.
:: Gösterim
Kitap Sınıfı bildirisinin gövdesinden sonra üye işlevlerinin dört tanımı vardır. Her biri, bu sınıfa ait olduğunu tanımlamak için Book:: önekiyle tanımlanır.:: kapsam tanımlayıcısı olarak adlandırılır. İşlevi sınıfın bir parçası olarak tanımlar. Bu sınıf deklarasyonunda açıktır, ancak bunun dışında değildir.
Bir sınıfta üye işlevi bildirdiyseniz, işlevin gövdesini bu şekilde sağlamanız gerekir. Book sınıfının başka dosyalar tarafından kullanılmasını istiyorsanız, kitap bildirimini ayrı bir klasöre taşıyabilirsiniz. başlık belki book.h olarak adlandırılır. Daha sonra başka herhangi bir dosya
#include "book.h"
05
09
Kalıtım ve Çok Biçimlilik
Bu örnek kalıtım gösterecektir. Bu, bir sınıf diğerinden türetilmiş iki sınıf bir uygulamadır.
#Dahil etmek
#Dahil etmek
sınıf Noktası
{
int x, y;
halka açık:
Nokta (int atx, int aty); // Yapıcı
satır içi sanal ~ Point (); // Yıkıcı
sanal boşluk Draw ();
};
sınıf Çemberi: public Point {
int yarıçapı;
halka açık:
Çember (int atx, int aty, int the Radius);
satır içi sanal ~ Circle ();
sanal boşluk Draw ();
};
Nokta:: Nokta (int atx, int aty) {
x = atx;
y = aty;
}
satır içi Nokta:: ~ Nokta (geçersiz) {
std:: cout << "Nokta Yıkıcı denir";
}
void Point:: Beraberlik (void) {
std:: cout << "Nokta ::" << x << "ile nokta çiz" << y << std:: endl;
}
Circle:: Circle (int atx, int aty, int theRadius): Nokta (atx, aty) {
yarıçap = Radyus;
}
satır içi Çember:: ~ Çember () {
std:: cout << "Circle Destructor denilen" << std:: endl;
}
void Circle:: Çizim (void) {
Nokta:: Draw ();
std:: cout << "daire:: Çizim noktası" << "Yarıçap" << yarıçap << std:: endl;
}
int main () {
Daire ACircle (10,10,5);
Bir daire. Çizmek() ;
dönüş 0;
}
Örnekte iki nokta vardır: Nokta ve Daire, bir nokta ve bir daire modelleme. Bir Noktanın x ve y koordinatları vardır. Circle sınıfı Point sınıfından türetilir ve bir yarıçap ekler. Her iki sınıf da bir Çizmek() üye işlevi. Bu örneği kısa tutmak için çıktı sadece metindir.
06
09
miras
Sınıf Daire türetilmiştir Nokta sınıf. Bu, bu satırda yapılır:
class Circle: Point {
Temel sınıftan (Nokta) türetildiği için, Circle tüm sınıf üyelerini devralır.
Nokta (int atx, int aty); // Yapıcı
satır içi sanal ~ Point (); // Yıkıcı
sanal boşluk Draw ();
Çember (int atx, int aty, int the Radius);
satır içi sanal ~ Circle ();
sanal boşluk Draw ();
Circle sınıfını, fazladan bir üyesi olan (yarıçap) Point sınıfı olarak düşünün. Temel sınıf üye işlevlerini ve özel değişkenleri devralır x ve y.
Gizli oldukları için bunları dolaylı olarak atayamaz veya kullanamaz, bu nedenle Circle yapıcısının Başlatıcı listesi aracılığıyla yapması gerekir. Bu şimdilik olduğu gibi kabul etmeniz gereken bir şey. Gelecekteki bir eğitimde başlatıcı listelerine geri döneceğim.
Circle Constructor'da önce yarıçap atandı yarıçap, Circle'ın Nokta kısmı, Başlatıcı listesindeki Point yapıcısına yapılan bir çağrı ile oluşturulur. Bu liste: ve {aşağıdaki arasındaki her şeydir.
Çember:: Çember (int atx, int aty, int the Radius): Nokta (atx, aty)
Bu arada, tüm yerleşik tipler için yapıcı tipi başlatma kullanılabilir.
int al (10);
int a2 = 10;
Her ikisi de aynı şeyi yapıyor.
07
09
Çok Biçimlilik Nedir?
Polimorfizm "birçok şekil" anlamına gelen jenerik bir terimdir. C ++ 'da Polimorfizmin en basit şekli fonksiyonların aşırı yüklenmesi. Örneğin, SortArray (dizi türü) sortarray bir olabilir dizi ints veya çiftler.
Yine de burada sadece OOP polimorfizm formuyla ilgileniyoruz. Bu, bir işlev (ör. Draw ()) yapılarak yapılır gerçek Temel sınıfta Nokta ve sonra onu geçersiz kılma Türetilmiş sınıf Daire.
İşlev rağmen Çizmek() türetilmiş sınıfta sanaldır Daire, bu aslında gerekli değildir - bana bunun sanal olduğunu hatırlatmak isterim. Türetilmiş bir sınıftaki işlev, ad ve parametre türlerindeki temel sınıftaki bir sanal işlevle eşleşiyorsa, otomatik olarak sanal olur.
Bir nokta çizmek ve bir daire çizmek, sadece nokta ve dairenin ortak koordinatları ile iki farklı işlemdir, bu yüzden doğru Çizmek() denir. Derleyicinin doğru sanal işlevi alan kodu üretmeyi nasıl başardığı, gelecekteki bir öğreticide ele alınacaktır.
08
09
C ++ Oluşturucuları
Kurucular
Yapıcı, bir nesnenin üyelerini başlatan bir işlevdir. Bir kurucu yalnızca kendi sınıfındaki bir nesnenin nasıl oluşturulacağını bilir.
Yapıcılar temel ve türetilmiş sınıflar arasında otomatik olarak miras alınmaz. Türetilmiş sınıfta bir tane sağlamazsanız, bir varsayılan değer sağlanır, ancak bu istediğinizi yapmayabilir.
Hiçbir kurucu sağlanmazsa, derleyici tarafından herhangi bir parametre olmadan varsayılan bir oluşturucu oluşturulur. Varsayılan ve boş olsa bile her zaman bir kurucu olmalıdır. Bir kurucuya parametreler sağlarsanız, bir varsayılan oluşturulamaz.
Yapıcılar hakkında bazı noktalar:
- Yapıcılar sadece sınıfla aynı ada sahip işlevlerdir.
- Yapıcılar, sınıfın bir örneği oluşturulduğunda sınıf üyelerini başlatmaya yöneliktir.
- Yapıcılar doğrudan çağrılmaz (başlatıcı listeleri hariç)
- Yapıcılar asla sanal değildir.
- Aynı sınıf için birden çok kurucu tanımlanabilir. Bunları ayırt etmek için farklı parametreleri olmalıdır.
Varsayılan yapıcılar, atama ve kopya yapıcılar gibi kurucular hakkında öğrenilecek çok şey var. Bunlar bir sonraki derste tartışılacaktır.
09
09
C ++ Yıkıcıları Toplama
Bir yıkıcı, yapıcı (ve sınıf) ile aynı ada sahip ancak önünde ~ (tilde) bulunan bir sınıf üyesi işlevidir.
• Daire ();
Bir nesne kapsam dışına çıktığında veya daha nadiren açıkça yok edildiğinde, yıkıcısı çağrılır. Örneğin, nesnenin işaretçiler gibi dinamik değişkenleri varsa, bunların serbest bırakılması gerekir ve yıkıcı uygun yerdir.
Yapıcılardan farklı olarak, sınıflar oluşturduysanız yıkıcılar sanallaştırılabilir ve yapılmalıdır. İçinde Nokta ve Daire sınıflar örneğinde, yapılacak temizleme işi olmadığından yıkıcıya gerek yoktur (sadece örnek olarak kullanılır). Dinamik üye değişkenler olsaydı ( işaretçileri) bu durumda bellek sızıntılarını önlemek için serbest bırakılması gerekirdi.
Ayrıca, türetilmiş sınıf toplama gerektiren üyeler eklediğinde sanal yıkıcılar gerekir. Sanal olduğunda, en türetilmiş sınıf yıkıcısı önce çağrılır, daha sonra derhal atalarının yıkıcısı çağrılır ve böylece temel sınıfa kadar devam eder.
Örneğimizde,
• Daire ();
sonra
• Nokta ();
Temel sınıf yıkıcıya son denir.
Bu dersi tamamlar. Bir sonraki derste varsayılan kurucular, kopya kurucular ve atamalar hakkında bilgi edinin.