‫Dolayısıyla, temel -- sınıfımızda bazı bileşenlere ihtiyacımız olduğunu biliyoruz.
‫Tankın alt kısmı ve taret için bir taban ağına ihtiyacımız olduğunu biliyoruz.
‫Ayrıca üst kısım için bir taret ağına ihtiyacımız var.
‫Çarpışmayı idare etmek için bir kapsüle ve bir mermi ortaya çıkma noktasına ihtiyacımız var.
‫Bu bir sahne bileşeni olacak.
‫Şimdi, bunları temel pod sınıfına ekledikten sonra, bu sınıfa dayalı olarak oluşturduğumuz her
‫şey bu şeyleri miras alacaktır.
‫Böylece üsse dayalı bir tank oluşturabiliriz ve sonra gidip yine üsse dayalı bir kule oluşturabiliriz.
‫Ve temel pod'a dayandıkları için bu bileşenleri miras alırlar.
‫Tankın kendi taban ağı, kendi taret ağı, kendi kapsülü ve kendi mermi ortaya çıkma noktası olabilir.
‫Ve aynı şekilde, kule de kendi taban ağı taret ağı kapsül bileşenine ve mermi ortaya çıkma noktasına
‫sahip olacak.
‫Ve çok yakında bunların her birine farklı görünmeleri için nasıl farklı kafesler atayabileceğimizi göreceğiz.
‫Bu yüzden bazı bileşenlere ihtiyacımız olduğunu biliyoruz.
‫Şimdi sıra temel -- sınıfımıza bazı bileşenler eklemeye geldi.
‫Şimdi, varsayılan olarak zaten bir genel bölümümüz, bir korumalı bölümümüz ve burada ikinci genel bölümümüz
‫var.
‫Birden fazla kamu bölümüne sahip olmak için çeşitli nedenler vardır ve bunlardan daha sonra bahsedeceğiz.
‫Ancak bileşenlerimiz için özel bir bölüm oluşturacağız.
‫Daha önce öğrendiğiniz gibi, üye değişkenlerin özel olması iyidir, böylece yalnızca onlara
‫sahip olan sınıf içinden erişilebilirler.
‫Bu yüzden bazı bileşenlere ihtiyacımız var.
‫Ekleyeceğim ilk şey kapsül.
‫O halde kapsül bileşeni türünde bir değişken oluşturalım.
‫Şimdi bu bir işaretçi olacak.
‫Değişkenlerimizin çoğu için integer veya float gibi temel tipler olmadıkları sürece işaretçiler
‫kullanacağız.
‫Bildiğiniz gibi bunun nedeni işaretçilerin hafif olması, sadece adreslerden oluşması ve daha verimli
‫olmamızı sağlamasıdır.
‫Bu U kapsül bileşeni işaretçisine sahibiz ve bu kapsül bileşenine kapsül bileşeninin kısaltması olan capsule comp diyeceğiz.
‫Şimdi kapsül bileşeninin hemen üzerine, unreal engine'e özgü bir makro ekleyeceğiz ve bu, kendi parantezleriyle birlikte
‫büyük harflerle yazılmış özelliğinizdir.
‫Özelliğiniz, unreal engine'in bu değişkenden haberdar olmasını sağlamanın bir yoludur, böylece unreal motorlara katılabilir.
‫Yansıma Sistemi.
‫Yansıma sistemi, bu değişkeni planlara göstermek ve çöp toplamaya katılmak gibi şeyler
‫yapmamıza olanak tanır.
‫Dolayısıyla you özelliğini eklemek, bileşenlerimizi oluştururken onlara ekleyeceğimiz bir şey olacak.
‫Bu kapsül bileşenine sahibiz ve YOU kapsül bileşeni türünü kullandığımız için derleyiciye
‫bu tür hakkında bilgi vermemiz gerekiyor.
‫Varsayılan olarak bir kapsül bileşeninin ne olduğunu bilmez.
‫Şimdi normalde derleyiciye bir kapsül bileşeninin ne olduğunu söylemek için, burada en üstte include yönergelerimizle
‫birlikte bir başlık dosyası ekleriz, eğer gerçek dışı motor belgelerine gidip kapsül bileşeni
‫için arama yaparsak, tam burada derleyiciye kapsül bileşeni hakkında bilgi vermek için eklememiz gereken
‫başlık dosyasını include yazan yeri görebiliriz.
‫Şimdi bunu tam buraya, en üste ve sonra da U'ya ekleyebiliriz.
‫Kapsül bileşen tipi derleyici tarafından tanınacak ve her şey yolunda gidecektir.
‫Ancak genel olarak, bu tür şeyleri kodlamak söz konusu olduğunda iyi uygulama, bu başlık dosyasını mümkün olduğunca
‫küçük tutmaya çalışmaktır.
‫Bu dosyaya bir başlık dosyası eklediğimizde, önişlemci adı verilen bir program bu başlık dosyasının
‫tüm içeriğini alır, yorumlar gibi bazı şeyleri çıkarır ve ardından başlık dosyasının
‫tüm içeriğini bu dosyaya yapıştırır.
‫Sonuç olarak bu dosya büyür çünkü dahil edilen dosyanın içeriği buraya yapıştırılır.
‫Bir şeyleri yalnızca kullandığımız zaman dahil etmek istiyoruz.
‫Peki, başlık dosyasını burada temel -- başlığına dahil etmeden nasıl kurtulabiliriz?
‫C++'da ileri bildirim olarak bilinen bir şeyi kullanabiliriz.
‫Bu u kapsül bileşen türünü class anahtar sözcüğünü kullanarak aşağıdaki gibi bildiririz.
‫Derleyicinin artık bir değişken bildirdiğimizde bu türü yeşil olarak gösterdiğine dikkat edin, daha sonra başlık
‫dosyasını eklemeden kurtulabildik.
‫Derleyiciye bunun bir tür olduğunu söylüyor, böylece artık bize IntelliSense hataları vermeyecek ve bunu
‫bir tür olarak tanımadığını söyleyecek.
‫Şimdi bu tamamlanmamış bir türdür.
‫Fonksiyonlar ve değişkenler gibi üyelere erişerek ya da bu türden bir nesne oluşturmaya çalışarak bu türü gerçekten
‫kullanmaya çalışırsak, tamamlanmamış bir tür olduğu için bir hata alırız.
‫Bunları yapmak için bu türü kullandığımız her yerde başlık dosyasına ihtiyacımız olacaktır, böylece başlık dosyasına ihtiyaç duymamak
‫için bir türün işaretçisini ileriye doğru bildirebiliriz.
‫Ancak, belirli sınıflardan miras almak için başlık dosyalarına ihtiyacımız olduğunu unutmamak önemlidir.
‫Bu sınıfın bir göletten miras aldığına ve gölet başlık dosyasının burada en üstte yer aldığına dikkat edin.
‫Yani kalıtım, miras aldığımız tür için başlık dosyası gerektirir.
‫Şimdi ileriye dönük beyanı ve bunu neden yapmak istediğimizi tartışalım.
‫Diyelim ki Base Pon adında bir sınıfımız var ve bu sınıfın siz kapsül bileşeni türünde bir işaretçi değişkene sahip olması
‫gerekiyor.
‫Artık kapsül bileşeniniz kapsül bileşen başlık dosyasındadır.
‫Şimdi bu türü aslında U'nun bir nesnesini oluşturduğumuzda kullanacağız.
‫Kapsül bileşen tipi.
‫Yani, gerçekten ihtiyacımız olan tek şey U kapsül bileşeni tipinde bir işaretçiye sahip olmaktır.
‫Şimdi gerçek şu ki, H aslında kapsül bileşen sınıfının uygulama ayrıntılarına ihtiyaç duymuyor.
‫Başka bir deyişle, işlevlerin nasıl tanımlandığını veya kapsül bileşen sınıfının ne kadar büyük olduğunu bile bilmesine
‫gerek yoktur.
‫Bir kapsül bileşen işaretçisi diğer işaretçilerle aynı boyuttadır.
‫Sadece bir adres.
‫Şimdi temel plan sınıfında.
‫Kapsül bileşenini oluşturmak istiyoruz.
‫Bu nedenle, bu nesneyi oluşturmak için gerekli belleği düzenlemek amacıyla bir kapsül bileşeninin boyutunu
‫bilmemiz gerekir.
‫Bu nedenle, kapsül bileşen başlığına Ponca üssünde kesinlikle ihtiyaç duyulmasa da, üssünde kesinlikle ihtiyaç duyulmaktadır.
‫Porkpie Bu nedenle iyi bir programlama uygulaması, başlıkları yalnızca gerçekten ihtiyaç duyduğunuz yerlere dahil etmektir, böylece
‫temel ürün H'de U tipi bir kapsül bileşeni işaretçisi bildirerek ve ardından uygulama ayrıntılarına ihtiyaç duyduğumuz
‫kapsül bileşenlerini dahil ederek kurtulabiliriz çünkü bir kapsül bileşeni oluşturuyoruz ve a'nın boyutunu
‫bilmemiz gerekiyor.
‫Bellekteki kapsül bileşeni.
‫Şimdi bunun yerine başlık dosyasını base pond FX'e dahil etmenin sonuçlarını tartışalım.
‫Gördüğümüz gibi, bunu kesinlikle yapabiliriz ve şunu düşünüyor olabilirsiniz, peki, bunu zaten temel
‫pont CP'ye dahil ediyoruz, o halde bir dosyaya dahil etmemizle diğerine dahil etmemiz arasında ne fark var?
‫İşte sorun burada ortaya çıkıyor.
‫Başlık dosyaları diğer dosyalar tarafından dahil edilmek üzere tasarlanmıştır.
‫Diyelim ki Base Pond H'ye sahibiz ve içine kapsül bileşenleri dahil ettik.
‫Ve daha sonra yolun ilerisinde başka bir sınıfımız olacak ve tıpkı base pod'da kapsül bileşeni işaretçimiz
‫olduğu gibi başka bir sınıfta da bir base pond işaretçimiz olacak.
‫Şimdi, temel piyon işaretçisini ve başka bir sınıfı ileriye doğru bildirme zahmetine
‫girmek yerine, bunu normal olarak bildireceğiz ve temel piyonu başka bir sınıfa dahil edeceğiz.
‫Yani artık Base Pond H sadece kapsül bileşen başlığını içermekle kalmıyor, bu da başlık dosyasına daha fazla kod kopyalanmasına
‫neden oluyor.
‫Şimdi kapsül bileşenini içeren başka bir sınıfın tabanı var.
‫Dolayısıyla, tüm içerik ve kapsül bileşenleri de başka bir H sınıfının içindedir ve orada olması bile
‫gerekmez.
‫H'nin sadece taban hakkında bilgi sahibi olması gereken başka bir sınıf kapsül bileşenini umursamaz.
‫Şimdi bu kalıbı devam ettirdiğimizi ve başka bir sınıf adında başka bir sınıf oluşturduğumuzu varsayalım ve başka
‫bir sınıfın ileri bildirim yerine şimdi başka bir sınıf türünde bir işaretçiye sahip olması gerekebilir.
‫Başka bir H sınıfını başka bir H sınıfına ve şimdi de başka bir H sınıfının içine dahil ediyoruz.
‫Temel havuz veya kapsül bileşeni H için başlığa ihtiyacımız olmamasına rağmen, başka bir sınıfın
‫içinde bu başlık dosyalarını içerdiği için başka bir sınıfta bulduk.
‫Dolayısıyla, kapsül bileşenlerinin tüm içeriklerinin kopyalarına sahibiz ve H'ye dayalı olarak burada başka bir sınıfta
‫sıkışıp kaldık, bu dosyayı şişirdik ve derleme sürelerini artırdık çünkü ileri bildirim yapmadık.
‫Bunun yerine yapılması gereken en iyi şey, başlık dosyalarını gerçekten ihtiyaç duyulan yerlere dahil etmektir.
‫Yani kapsül bileşenlerini alır ve yalnızca based upon CPP'ye dahil edersek, daha sonra başka bir sınıf oluşturduğumuzda
‫ve aslında base pod'u kullanmamız gerektiğinde, başlığı oraya dahil edebiliriz ve
‫base upon kapsül bileşenlerini içermez, böylece tüm bu ekstra kod başka bir sınıfa dahil edilmez.
‫Ve sonra gidip başka bir sınıfa ihtiyaç duyan başka bir sınıf oluşturduğumuzda,
‫h sınıfını CPP'nin gerçekten ihtiyaç duyduğu başka bir sınıfa dahil edebiliriz ve böylece
‫H sınıfı ihtiyaç duymadığı diğer başlık dosyalarının içeriğiyle dolmaz.
‫Bu nedenle, sınıfların kapsül bileşenine bağlı olarak bunun gibi bağımlılıkları olduğunda, bu bağımlılıkları minimumda
‫tutmak en iyisidir.
‫Bu yüzden size bir derleme hatası yaratmanız için meydan okuyacağım.
‫Derleme hatalarından korkmamalıyız.
‫Bunlar sadece geliştirme sürecinin normal bir parçasıdır.
‫Bu nedenle, kasıtlı olarak geri dönüp class anahtar sözcüğünü kaldırarak bir tane oluşturacağız ve kapsül comp'i ileri
‫bildirmeden derleyeceğiz.
‫Şimdi derleme dediğimde, Visual Studio kodundan derleyebileceğinizi kastediyorum, sadece normal bir C++ derlemesi.
‫Bunu nasıl yapacağınızı öğrendiniz veya dosyanızı ve Visual Studio kodunuzu kaydedip canlı kodlamaya başlayabilirsiniz.
‫Bunlardan herhangi biri de iyidir ve bunu birlikte yaptığımızda, size her iki yöntemle de neler olduğunu göstereceğim.
‫Canlı kodlama kullanıyorsanız, elbette Visual Studio kodunda göreceğiniz çıktının
‫aksine canlı kodlama penceresinde oluşturulan çıktıya bakacaksınız.
‫Şimdi spoiler, bir derleme hatası alacaksınız, derleme hatası mesajına bakın, size ne söylediğine
‫bakın.
‫Bu sadece ürettiğimiz hataları tanımak içindir.
‫Bundan sonra, geri ve ileri gidin, class anahtar sözcüğünü kullanarak kapsül comp'yi bildirin.
‫Bunu yaptıktan sonra tekrar derleyin, bu sefer başarılı bir derleme elde etmelisiniz.
‫Videoyu duraklatın ve bunu deneyin.
‫Pekala, şimdi kodumuzda biraz tahribat yaratalım.
‫Sınıf anahtar kelimesini kaldıracağım.
‫Tamam, derlemeye çalıştık ve işte terminaldeki çıktı.
‫Gördüğümüz ilk şey hata ve bize bir hata kodu veriyor ve kapsül comp'in bir temel piyonun üyesi
‫olmadığını söylüyor.
‫Bir temel piyonun C bildirimini söyleyen bir notumuz var ve bunun sonucunda başka hatalar aldığımızı
‫görüyoruz.
‫Bu nedenle, öğrenciler derlemeye çalıştıklarında çoğu zaman kafaları karışacak ve birden fazla hata göreceklerdir.
‫Bu da tek bir hatanın bir dizi hataya yol açabileceğini gösteriyor.
‫Ve bu, gidip bir sürü dosyayı düzeltmeniz gerektiği anlamına gelmez.
‫Hatanın burada tek bir kaynağı olabilir.
‫Hatanın kaynağının ne olduğunu biliyoruz.
‫Bildirimde bulunmamız gerekiyor.
‫Şimdi normal derleme ve Visual Studio kodu yerine canlı kodlama kullanırsak ne olacağını görelim.
‫Şimdi devam edip canlı kodlamayı başlatmak için düğmeye tıklayacağım ve hemen kırmızı renkte derleme başarısız oldu yazısını
‫göreceğim ve burada da aynı şeyi göreceğiz.
‫Tam burada.
‫Kapsül comp, temel rehin senedinin bir üyesi değildir.
‫Bir temel piyonun bildirimine bakın.
‫Yani burada da aynı şeyi görüyoruz.
‫Yani her iki durumda da forward declare etmeyi unuttuğumuzda bunun gibi bir hata göreceğiz.
‫Artık neye benzediğini biliyoruz ve artık daha bilgiliyiz ve bu gizemli derleme hata mesajlarından daha
‫az korkuyoruz.
‫Bu yüzden yapacağımız şey, kapsül bileşeninizi ileriye doğru bildirerek bu hatayı düzeltmek ve ardından tekrar
‫derlemeyi deneyebiliriz.
‫Ve şimdi herhangi bir hata olmadan derledik.
‫Şimdi, bir değişkeni önceden bildirmeyi unuttuğumuzda nasıl göründüğünü görüyoruz.
‫İleride derleyici hataları aldığınızda bunu aklınızda bulundurun.
‫Özet olarak, yeni bir işaretçi oluştururken ileri bildirim konusunu tartıştık ve CP dosyasına yalnızca
‫kullandığınız şeyleri dahil etmeniz gerektiğini ve H dosyasına mümkün olduğunca az şey dahil etmemiz gerektiğini öğrendik.
‫İleri bildirim yaptığımız sürece yeni bir işaretçi bildirmek için başlık dosyasına ihtiyacımız olmadığını ve belirli
‫bir türde bir nesne oluşturacaksak başlık dosyasına ihtiyacımız olduğunu biliyoruz.
‫Fonksiyonlar ve değişkenler gibi üyelere erişmek için başlık dosyasına ihtiyacımız var ve bir sınıftan miras
‫almak için aslında başlık dosyasına ihtiyacımız olduğunu gördük.
‫O başlık dosyasına ihtiyacımız var.
‫Artık bir türü nasıl bildireceğimizi bildiğimize ve kapsül bileşeni işaretçimize sahip olduğumuza göre,
‫bir kapsül bileşeni nesnesi oluşturmaya hazırız ve bunu bir sonraki videoda yapacağız.
‫Yakında görüşürüz.