this keyword -anahtar kelimesi, aynen ingilizcede olduğu gibi bu anlamına gelir ve mevcut nesne instance 'ını işaret eder, işaret eder ibaresinden, arkadaşın bir pointer olduğunu anlayabiliriz. Pointer konusunu ileride yazıyor oluruz, çok kafaya takılacak bir durumu yoktur, kendisi de bir değişken olup işaret ettiği değişken ya da nesnenin bellek adresini tutar sadece. Ne diyorum, nedir "nesne" nin instance 'ı, bunu bilmek ne işimize yarayacak ya da nasıl kullanacağız bakalım.
Bir class 'ım var, sistemimdeki motoru sürdüğüm ve ona bağlı değişkenleri parametreleri fonksiyonları/işlevleri barındırdığım. Motora sistemin bir çok modülünden erişmem ve yönetmem ya da parametrelerini okuyup değiştirmem gerekiyor. Bu class 'ımı da bir cpp dosyasında barındırıyorum, bir de header dosyam var.
Header dosyam şu şekilde olsun:
header dosyamızda fonksiyon prototiplerimiz ve değişkenlerimiz var. Cpp dosyamız da şu şekilde
Buradaki asıl olayımız motoru sürmek olmadığından fonksiyonları boş bıraktım. Konu itibariyle dikkat etmeniz gereken yerlere bakalım : cpp dosyasındaki
ilk satır DCEngine class 'ına ait bir instance oluşturur, ikinci satır tipi DCEngine nesnesi olan bir pointer oluşturur ancak henüz işaret ettiği bir instance yoktur bu pointer için. Class 'ın constructor 'ı dediğimiz ve class ile aynı ismi taşıyan fonksiyon, class instance 'ını oluşturuğumuz anda çalışan kod parçasıdır, yani yukardaki ilk satır işleme alındığında bu kod bloğu yürütülür :
instance oluşturulduğunda, evvelce oluşturduğumuz class pointer 'ının (enginePtr) içi dolmuş ve en son oluşturulan DCEngine class 'ının instance ına ait bellek adresini taşımaya başlar. Tam değişiyle Engine nesnesini işaret eder / gösterir / erişim hakkı tanır.
Artık diğer herhangi bir cpp dosyasının içerisinden
yazarak sayfanın herhangi bir yerinden bu DCEngine Instance 'ına şu şekilde ulaşabiliyor olacağız
peki neden bu yolu izliyoruz? Lazım olan sayfada bu instance 'ı oluşturup pekala erişebilirim, evet erişebilirsin ancak amacımız tek bir instance 'a sahip olmak ve heryerden aynı instance 'a erişmek. Diğer türlü her instance için ayrı bir bellek ayırmış olursun ve her instance 'ın parametreleri birbirinden farklı olabilir, bir diğer önemli olan noktaysa bu şekilde bir nesne instance'ına static bir fonksiyonun içinden de erişebiliyor olman olacaktır. Son olarak neden oluşturulan son instance 'ı işaret eder dediğime dikkat edin, eğer başka bi yerde başka bir instance oluşturursanız enginePtr artık oluşturduğunuz son instance ' ı işaret ediyor olacak.
Bir örnek daha verelim de olay biraz daha netleşsin mi?
class 'ıma ait bit x var, class 'ıma ait bir fonksiyonun parametresi olarak da x var, Fonksiyona parametre olarak gönderilen x değerini class 'ıma ait x değerine ataması için bir fonksiyon yazmışım, fantastik mi görünüyor? neden ikisi de x birinin adını değiştirip çözerim ben bu işi, tabii ki öyle ama her zaman kod yazmazsınız, bazen başkasının yazdığı kodu anlamanız gerekir ve o da böyle yazmıştır kodu :) aslında bu yapı c# daki bir class property 'sinin get set edilmesinin temelidir. Koddan anlaşılacağı üzere class 'a ait x değişkenine this ile erişiriz. this->x class 'ın x idir, yalın x parametreden gelen x 'tir.
Önceki Konu : C++ Literals
İçerik : C++ Dersleri Konu Başlıkları ~ İçerik
Sonraki Konu : C++ Integer Literal | Tam sayı hazır bilgileri