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.
Tantangan
MudahMari 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 structPersondengan dua field:name(array karakter dengan 50 karakter) danage(bilangan bulat). Lalu, definisikan structEmployeeyang menyematkanPersonsebagai member pertamanya dan menambahkan fieldemployee_id(bilangan bulat).types.c: Implementasikan fungsi bernamaprint_employeeyang menerima pointer keEmployeedan mencetak informasinya. Akses data orang yang disematkan dengan sintaks titik/anak panah berantai yang telah kamu pelajari.main.c: Buat variabelEmployee, 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: 1001Di 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;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online