sınıfın tamamlanmamış türlerden (incomplete type) static veri öğeleri

Bir sınıfın static bir veri öğesi tamamlanmamış bir türden (incomplete type) olabilir. Aşağıdaki örneğe bakalım:

myclass.h isimli başlık dosyasında Myclass isimli bir sınıf tanımlanıyor. Başlık dosyası içinde ismi A olan bir sınıfının ön bildiriminin yapıldığını görüyorsunuz. Sınıfın public bölümünde A sınıfı türünden ms_a isimli static veri öğesi bildiriliyor. Sınıfımızın public bölümünde bir başka static veri öğesi olan ms_b aşağıdaki biçimde bildiriliyor:

Bu bildirimde class anahtar sözcüğü kullanıldığından B sınıfının ayrı bir ön bildirimine ihtiyaç duyulmuyor. Başlık dosyasındaki tüm bildirimler geçerli. Sınıfların static olmayan veri öğeleri (non static data members) tamamlanmış türlerden (complete types) olmak zorunda. Ancak sınıfların static veri öğeleri tamamlanmamış türlerden olabiliyor. Bunu bilmek şu açıdan da önemli: Sınıfımızın başka sınıf türlerinden static veri öğelerine sahip olması durumunda sınıfımızın başlık dosyasında, static veri öğelerinin ait oldukları sınıfların başlık dosyalarını dahil etmemize gerek yok. Böylece projelerin derleme süresini kısalttığımız gibi static veri öğelerinin tanımını içeren başlık dosyalarında bir değişiklik olduğunda, yalnızca o başlık dosyasını dahil eden kod dosyasını yeniden derlememiz yeterli oluyor.

Başlık dosyalarında sınıf tanımı içinde sınıfın static veri öğeleri yalnızca bildiriliyor. Programımızın bağlanabilmesi (link) için sınıfın static veri öğelerinin kod dosyası içinde tanımlanmaları gerektiğini unutmayalım. Şimdi de myclass.cpp isimli kod dosyasına bakalım:

Bir sınıf türünden nesne tanımlayabilmemiz için derleyicinin söz konusu sınıfın tanımını (definition) görmesi gerekiyor. A sınıfının tanımının a.h isimli başlık dosyasında, B sınıfının tanımının da b.h isimli başlık dosyasında yer aldığını düşünelim. myclass.cpp dosyası bu başlık dosyalarını #include önişlemci komutuyla ediniyor.

Bir sınıfın static veri öğesinin türü sınıfın bir içsel türü de (nested type) olabilir. Bu durumda içsel türün ön bildirimi sınıfın içinde yapılmalı:

Şimdi de yukarıdaki koda bakalım:
myclass.h isimli başlık dosyasında tanımlanan Myclass sınıfının tanımı içinde A isimli içsel bir sınıfın ön bildirimi yapılıyor. Sınıfın ms_a isimli static veri öğesi bu içsel sınıf türünden. myclass.cpp isimli kod dosyasında ise içsel A sınıfının tanımı yapılıyor. Myclass sınıfının içsel A sınıfı türünden static veri öğesinin tanımının geçerli olması için yine derleyicinin A sınıfının tanımını görmesi gerekiyor.

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kod Eklemek İçin Okuyun