Menu
CoddyTech

Penyematan Struct

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 28 dari 61.

Dalam bahasa berorientasi objek seperti C++ atau Java, inheritance memungkinkan sebuah class memperoleh property dari parent class. C tidak memiliki inheritance bawaan, tetapi kita bisa menyimulasikannya dengan teknik yang disebut komposisi: menempatkan satu struct di dalam struct lainnya.

Idenya sederhana: jika Child membutuhkan semua property dari Parent, kita menyematkan struct Parent sebagai member dari Child.

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

typedef struct {
    Parent parent;  // Struct yang disematkan
    int grade;
} Child;

Di sini, Child berisi semua yang dimiliki Parent, ditambah field grade-nya sendiri. Ini adalah komposisi: child "memiliki" parent, bukan "merupakan" parent, tetapi efeknya mirip dengan pewarisan.

Untuk mengakses anggota milik parent melalui instance child, kamu menggunakan operator titik dua kali:

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

Pola ini menjadi dasar untuk membangun hierarki tipe di C. Dengan menyematkan struct dasar sebagai anggota pertama, kita dapat menggunakan teknik yang ampuh, yang akan kita bahas dalam pelajaran mendatang.

challenge icon

Tantangan

Mudah

Mari kita buat sistem pengelolaan karyawan sederhana yang menunjukkan penyematan struct: dasar pewarisan dalam C.

Kamu akan membuat hierarki yang menempatkan Person di dalam Employee. Ini mencerminkan cara kerja pewarisan: seorang karyawan adalah seseorang dengan informasi pekerjaan tambahan. Dengan menyematkan struct Person di dalam Employee, kamu mendapatkan semua property orang tersebut serta field khusus karyawan.

Kamu akan mengatur kodemu dalam tiga file:

  • types.h: Definisikan kedua struct di sini dengan include guard. Pertama, buat struct Person dengan dua field: name (array karakter dengan 50 karakter) dan age (bilangan bulat). Lalu, definisikan struct Employee yang menyematkan Person sebagai member pertamanya dan menambahkan field employee_id (bilangan bulat).
  • types.c: Implementasikan fungsi bernama print_employee yang menerima pointer ke Employee dan mencetak informasinya. Akses data orang yang disematkan dengan sintaks titik/anak panah berantai yang telah kamu pelajari.
  • main.c: Buat variabel Employee, isi semua field-nya (termasuk nama dan usia orang yang disematkan), lalu gunakan fungsi cetakmu untuk menampilkan informasi.

Kamu akan menerima tiga input: nama karyawan (sebuah string), usia karyawan (bilangan bulat), dan ID karyawan (bilangan bulat).

Fungsi print_employee harus menampilkan informasi karyawan dalam format berikut:

Employee: Alice
Age: 28
ID: 1001

Di sini, Alice adalah nama, 28 adalah usia, dan 1001 adalah ID karyawan dari inputmu.

Ingat untuk mengakses member struct yang disematkan melalui member induknya. Misalnya, untuk mendapatkan nama, kamu harus menelusuri member person terlebih dahulu.

Coba sendiri

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

int main() {
    // Baca input
    char name[50];
    int age;
    int employee_id;
    
    fgets(name, 50, stdin);
    name[strcspn(name, "\n")] = '\0';  // Hapus karakter baris baru
    scanf("%d", &age);
    scanf("%d", &employee_id);
    
    // TODO: Buat variabel Employee
    
    // TODO: Isi nama dan usia person yang tertanam
    // Petunjuk: Gunakan strcpy untuk nama, akses dengan employee.person.name
    
    // TODO: Atur employee_id
    
    // TODO: Panggil print_employee dengan pointer ke employee milikmu
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C online