Opaque Pointer Kavramı
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 17 / 61.
Şimdiye kadar, bir başlık dosyasında bir yapı tanımladığımızda, bu başlık dosyasını içeren herkes tüm üyelerini görebilir ve bunlara doğrudan erişebilir. Bu, kapsüllemeyi bozar: iç ayrıntıları dışarıdaki koddan gizleme ilkesini.
C, bunu çözmek için opak işaretçiler adı verilen güçlü bir teknik sunar. Fikir basittir: bir yapının başlık dosyasında var olduğunu bildirin, ancak içinde ne olduğunu açıklamayın. Bu, tamamlanmamış tür kullanılarak yapılır:
// wallet.h
typedef struct Wallet Wallet; // Sadece bildirim - gövde yok!
Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);
Burada curly parantezlerinin bulunmadığına dikkat edin. Wallet öğesinin neler içerdiğini hiçbir zaman tanımlamıyoruz. Derleyici türün var olduğunu biliyor, ancak boyutunu veya üyelerini bilmiyor. Bu, bu başlığı içeren kodun yalnızca Wallet işaretçileriyle çalışabileceği, doğrudan struct ile çalışamayacağı anlamına gelir.
Bu neden önemlidir? Çünkü gerçek struct tanımı .c dosyasında gizli olduğundan, başlığınızı kullanan hiçbir kod w->balance veya sizeof(Wallet) yazamaz. Sağladığınız işlevleri kullanmaları gerekir. Verilere tüm erişimi siz kontrol edersiniz ve daha sonra, başlığınıza bağlı olan hiçbir kodu bozmadan iç yapıyı değiştirebilirsiniz.
Bir sonraki derste, opak işaretçi örüntüsünü tamamlayarak gerçek yapı gövdesini kaynak dosyasının içinde tanımlama alıştırması yapacaksın.
Kendin dene
Bu ders bir kod alıştırması içermiyor.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil HiyerarşisiKendi başına pratik yap: Online C derleyicisi