Menu
Coddy logo textTech

Struct Gömme

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 28 / 61.

C++ veya Java gibi nesne yönelimli dillerde kalıtım, bir sınıfın üst sınıftan özellikler edinmesini sağlar. C dilinde yerleşik kalıtım yoktur, ancak bileşim adı verilen bir teknik kullanarak bunu taklit edebiliriz: bir struct'ı başka bir struct'ın içine yerleştirmek.

Fikir basit: Bir Child için bir Parent'ın tüm özellikleri gerekiyorsa, Parent yapısını Child'ın bir üyesi olarak gömeriz.

typedef struct {
    int id;
    char name[50];
} Parent;

typedef struct {
    Parent parent;  // Gömülü struct
    int grade;
} Child;

Burada Child, Parent’ın sahip olduğu her şeyi ve ayrıca kendi grade alanını içerir. Bu bileşimdir: alt öğe, üst öğe "olur" yerine bir üst öğeye "sahiptir", ancak etkisi kalıtıma benzer.

Bir alt örneği aracılığıyla üst sınıfın üyelerine erişmek için nokta operatörünü iki kez kullanırsınız:

Child c;
c.parent.id = 101;
c.parent.name[0] = 'A';
c.grade = 5;

Bu örüntü, C'de tür hiyerarşileri oluşturmanın temelini oluşturur. Bir temel yapıyı ilk üye olarak gömerek, gelecek derslerde inceleyeceğimiz güçlü tekniklerin önünü açarız.

challenge icon

Görev

Kolay

Hadi C'de kalıtımın temelini oluşturan yapı gömmeyi gösteren basit bir çalışan yönetim sistemi oluşturalım.

Employee yapısının bir Person içerdiği bir hiyerarşi oluşturacaksın. Bu, kalıtımın nasıl çalıştığını yansıtır: Bir çalışan, işe ilişkin ek bilgilere sahip bir "kişidir". Person yapısını Employee içine gömerek kişinin tüm özelliklerinin yanı sıra çalışana özgü alanları da elde edersin.

Kodunu üç dosyaya düzenleyeceksin:

  • types.h: Her iki yapıyı da include guard'larıyla burada tanımla. Önce iki alanı olan bir Person yapısı oluştur: name (50 karakterlik bir karakter dizisi) ve age (bir tamsayı). Ardından Employee yapısını ilk üye olarak gömen ve bir Person alanı (bir tamsayı) ekleyen bir employee_id yapısı tanımla.
  • types.c: Bir print_employee işaretçisi alan ve çalışanın bilgilerini yazdıran Employee adlı bir işlev uygula. Gömülü kişinin verilerine, öğrendiğin zincirlenmiş nokta/ok sözdizimini kullanarak eriş.
  • main.c: Bir Employee değişkeni oluştur, gömülü kişinin adı ve yaşı da dahil olmak üzere tüm alanlarını doldur ve bilgileri görüntülemek için yazdırma işlevini kullan.

Üç girdi alacaksın: çalışanın adı (bir dize), yaşı (bir tamsayı) ve çalışan kimliği (bir tamsayı).

print_employee işlevin çalışanın bilgilerini şu biçimde göstermelidir:

Employee: Alice
Age: 28
ID: 1001

Burada Alice ad, 28 yaş ve 1001 girdilerinden alınan çalışan kimliğidir.

Gömülü yapının üyelerine üst üye üzerinden erişmeyi unutma; örneğin ada ulaşmak için önce person üyesi üzerinden ilerlemen gerekir.

Kendin dene

#include <stdio.h>
#include <string.h>
#include "types.h"

int main() {
    // Girdiyi oku
    char name[50];
    int age;
    int employee_id;
    
    fgets(name, 50, stdin);
    name[strcspn(name, "\n")] = '\0';  // Yeni satırı kaldır
    scanf("%d", &age);
    scanf("%d", &employee_id);
    
    // TODO: Bir Employee değişkeni oluştur
    
    // TODO: Gömülü kişinin adını ve yaşını doldur
    // İpucu: İsim için strcpy kullan, employee.person.name ile eriş
    
    // TODO: employee_id değerini ayarla
    
    // TODO: print_employee'yi employee'nize bir işaretçi ile çağır
    
    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