Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Davranış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 bir Counter üyesine sahip int value struct'ı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) ve counter_get (Counter'a işaretçi alır ve mevcut değerini döndürür). COUNTER_H sembolü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: 8

Kendin 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;
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online C derleyicisi