Menu
CoddyTech

Mengakses Anggota Parent

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

Sekarang setelah kita memahami penyisipan struct dan aturan anggota pertama, mari kita fokus pada penerapannya: cara membaca dan mengubah data induk yang disisipkan dari dalam fungsi.

Saat sebuah fungsi menerima struct Child (atau pointer ke struct tersebut), untuk mengakses anggota dari induknya, kamu perlu menelusuri struct yang disematkan. Sintaksnya bergantung pada apakah kamu menggunakan nilai atau pointer.

typedef struct {
    int id;
    int score;
} Parent;

typedef struct {
    Parent parent;
    char grade;
} Child;

Dengan pointer ke Child, gunakan operator panah untuk mencapai parent, lalu titik untuk mengakses anggotanya:

void update_score(Child* c, int new_score) {
    c->parent.score = new_score;  // Panah lalu titik
}

void print_info(Child* c) {
    printf("ID: %d, Score: %d\n", c->parent.id, c->parent.score);
}

Dengan nilai (diteruskan melalui salinan), gunakan titik di seluruh bagian:

void show_id(Child c) {
    printf("ID: %d\n", c.parent.id);  // Titik lalu titik
}

Pola akses berantai ini, child->parent.member atau child.parent.member, adalah cara kamu berinteraksi dengan data yang diwariskan dalam model komposisi C. Pola ini sedikit lebih panjang daripada pewarisan sejati, tetapi hubungannya antar tipe dinyatakan secara eksplisit dan jelas.

challenge icon

Tantangan

Mudah

Mari buat sistem penilaian siswa yang menunjukkan cara mengakses dan mengubah data di dalam struct yang disematkan. Kamu akan membuat hierarki dengan Student yang berisi Person tertanam, lalu menulis fungsi yang bekerja dengan data induk melalui data anak.

Kamu akan mengatur kodemu dalam tiga file:

  • student.h: Definisikan hierarki struct dengan include guard. Buat struct Person dengan name (array karakter sepanjang 50 karakter) dan age (bilangan bulat). Lalu definisikan struct Student yang menyematkan Person sebagai anggota pertama dan menambahkan field grade (bilangan bulat yang mewakili nilai mereka). Deklarasikan dua fungsi: set_person_age yang menerima Student* dan nilai usia baru, serta print_student yang menerima Student* dan menampilkan semua informasi.
  • student.c: Implementasikan kedua fungsi. Fungsi set_person_age-mu harus mengubah usia di dalam struct Person yang disematkan. Di sini kamu akan berlatih sintaks panah-lalu-titik (s->person.age). Fungsi print_student-mu harus mengakses dan menampilkan semua field dari person yang disematkan dan student itu sendiri.
  • main.c: Buat variabel Student dan inisialisasi semua field-nya. Lalu gunakan set_person_age untuk memperbarui usia person yang disematkan, dan panggil print_student untuk menampilkan hasilnya.

Kamu akan menerima empat input: name siswa (sebuah string), initial age-nya (bilangan bulat), grade-nya (bilangan bulat), dan new age (bilangan bulat untuk memperbarui usia melalui fungsimu).

Di file utamamu, buat student dengan nilai awal, lalu panggil set_person_age untuk mengubah usia ke nilai baru, dan terakhir panggil print_student untuk menampilkan informasi yang diperbarui.

Output-mu seharusnya terlihat seperti ini:

Name: Emma
Age: 21
Grade: 85

Di sini, Emma adalah nama, 21 adalah usia yang diperbarui (bukan usia awal), dan 85 adalah nilainya. Hal penting yang dipelajari di sini adalah menelusuri struct yang disematkan untuk membaca dan menulis anggota milik data induk.

Coba sendiri

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

int main() {
    char name[50];
    int initial_age, grade, new_age;
    
    // Baca input
    fgets(name, 50, stdin);
    name[strcspn(name, "\n")] = '\0';  // Hapus karakter baris baru
    scanf("%d", &initial_age);
    scanf("%d", &grade);
    scanf("%d", &new_age);
    
    // TODO: Buat variabel Student
    
    // TODO: Inisialisasi semua field student
    // - Salin name ke nama person yang tertanam menggunakan strcpy
    // - Atur usia person yang tertanam ke initial_age
    // - Atur grade student
    
    // TODO: Panggil set_person_age untuk memperbarui usia menjadi new_age
    
    // TODO: Panggil print_student untuk menampilkan hasilnya
    
    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