Nesne Olarak Struct'lar
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 6 / 61.
Nesne yönelimli dillerde nesne, verileri (durum) bu veriler üzerinde işlem yapan işlevlerle (metotlar) bir araya getiren bir varlıktır. C dilinde yerleşik nesneler yoktur, ancak struct'ları ve işlevleri kullanarak aynı kavrama ulaşabiliriz.
Bir struct'ı bir nesnenin "veri" kısmı olarak düşünün. Durumu, yani nesnenin şu anda ne olduğunu tanımlayan değerleri barındırır:
typedef struct {
int value;
} Counter;
Bu Counter yapısı, tek bir durum parçasına sahip bir varlığı temsil eder: geçerli değeri. Ona davranış kazandırmak için yapıyı parametre olarak kabul eden işlevler yazarız:
void counter_increment(Counter *c) {
c->value++;
}
int counter_get(Counter *c) {
return c->value;
}
Bu işlevler metotlar gibi davranır. Özellikle Counter verileri üzerinde çalışırlar. Yapıyı işlevlere geçirerek, counter.increment() çağırdığınızda diğer dillerin otomatik olarak yaptığı şeyi taklit ediyoruz.
int main() {
Counter my_counter = {0};
counter_increment(&my_counter);
printf("%d\n", counter_get(&my_counter)); // Yazdırır: 1
return 0;
}
typename_action adlandırma kuralı (counter_increment gibi) kodunuzu düzenlemenize yardımcı olur ve bir işlevin hangi struct'a ait olduğunu açıkça gösterir. Bu kalıp, C'de nesne yönelimli programlamanın temelidir.
Görev
KolayDavranışa sahip bir nesne olarak bir struct kullanan basit bir Counter modülü oluşturalım. Verileri, bu veriler üzerinde işlem yapan işlevlerle paketleme modelini uygulamak için kodunuzu üç dosyaya ayıracaksınız.
Üç dosya oluşturacaksınız:
counter.h: Tek birCounterüyesine sahipint valuestruct'ını bildiren başlık dosyanız. Ayrıca sayaç için "metot" görevi gören iki işlev bildirin:counter_increment(Counter'a işaretçi alır ve değerini 1 artırır) vecounter_get(Counter'a işaretçi alır ve mevcut değerini döndürür).COUNTER_Hsembolüyle include guard kullanın.counter.c: Her iki işlevi de uygulayan kaynak dosyanız. Başlık dosyanızı eklemeyi unutmayın.main.c: Bir Counter oluşturan, üzerinde işlemler gerçekleştiren ve sonuçları görüntüleyen ana dosyanız.
İki tamsayı girdisi alacaksınız: sayacınızın başlangıç değeri ve artırma işleminin kaç kez yapılacağı.
Ana dosyanızda, başlangıç değeriyle bir Counter başlatın, ardından counter_increment işlevini belirtilen sayıda çağırın. Son olarak, son değeri almak ve yazdırmak için counter_get işlevini kullanın.
Sonucu şu biçimde yazdırın:
Final value: {result}Örneğin, başlangıç değeri 5 ve 3 artırma işlemi için çıktı şöyle olur:
Final value: 8Kendin dene
#include <stdio.h>
#include "counter.h"
int main() {
// Girdiyi oku
int starting_value;
int num_increments;
scanf("%d", &starting_value);
scanf("%d", &num_increments);
// TODO: Bir Counter oluştur ve starting_value ile başlat
// TODO: counter_increment'i belirtilen sayıda çağır
// TODO: Son değeri almak ve yazdırmak için counter_get kullan
// Yazdırma formatı: "Final value: {result}"
return 0;
}
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