Menu
CoddyTech

Pola Konstruktor

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

Dalam bahasa seperti Java atau C++, kamu membuat object menggunakan konstruktor: fungsi khusus yang secara otomatis mengalokasikan memori dan menginisialisasi field. C tidak memiliki fitur seperti itu, tetapi kita bisa menyimulasikannya dengan pola sederhana: fungsi create_.

Fungsi konstruktor dalam C biasanya melakukan tiga hal: mengalokasikan memori dengan malloc, menginisialisasi semua field dengan nilai yang tepat, dan mengembalikan pointer ke object baru:

typedef struct {
    char *name;
    int age;
} Person;

Person *create_person(const char *name, int age) {
    Person *p = malloc(sizeof(Person));
    p->name = malloc(strlen(name) + 1);
    strcpy(p->name, name);
    p->age = age;
    return p;
}

Fungsi mengembalikan pointer karena object berada di heap, bukan di stack. Ini berarti object tetap ada setelah fungsi selesai dan dapat diteruskan dengan bebas. Pemanggil menggunakannya seperti ini:

Person *alice = create_person("Alice", 30);
printf("%s is %d years old\n", alice->name, alice->age);

Perhatikan bagaimana constructor menangani semua detail yang rumit: mengalokasikan struct, mengalokasikan ruang untuk string, dan menyalin data. Pemanggil hanya memberikan nilai awal dan menerima object yang siap digunakan. Ini merangkum logika pembuatan di satu tempat, sehingga kodemu lebih rapi dan lebih sedikit rentan terhadap error.

challenge icon

Tantangan

Mudah

Mari buat module Book yang menggunakan pola constructor untuk membuat object buku di heap. Kamu akan berlatih menulis fungsi create_ yang menangani semua alokasi dan inisialisasi memori, lalu mengembalikan pointer yang siap digunakan.

Kamu akan membuat tiga file:

  • book.h: Deklarasikan struct Book dengan dua anggota: char *title (pointer ke string yang dialokasikan secara dinamis) dan int pages. Deklarasikan juga fungsi constructor create_book yang menerima string judul dan jumlah halaman, lalu mengembalikan pointer ke Book yang baru dibuat. Gunakan include guard dengan simbol BOOK_H.
  • book.c: Implementasikan fungsi create_book. Constructor-mu harus mengalokasikan memori untuk struct Book itu sendiri, lalu mengalokasikan memori terpisah untuk string judul (ingat untuk memperhitungkan null terminator), menyalin judul ke memori baru, mengatur field pages, lalu mengembalikan pointer ke Book yang baru dibuat.
  • main.c: Gunakan constructor-mu untuk membuat buku dan menampilkan informasinya.

Kamu akan menerima dua input: judul buku (sebuah string) dan jumlah halaman (sebuah bilangan bulat).

Di file main-mu, gunakan create_book untuk membuat buku baru dengan nilai yang diberikan, lalu cetak informasinya dengan format ini:

Title: {title}
Pages: {pages}

Misalnya, dengan input The C Programming Language dan 272, output-nya adalah:

Title: The C Programming Language
Pages: 272

Ingat bahwa constructor-mu merangkum semua logika pembuatan: pemanggil cukup memberikan nilai awal dan menerima object yang sudah diinisialisasi sepenuhnya dan siap digunakan.

Coba sendiri

#include <stdio.h>
#include <stdlib.h>
#include "book.h"

int main() {
    char title[256];
    int pages;
    
    // Baca input
    fgets(title, sizeof(title), stdin);
    // Hapus karakter baris baru jika ada
    for (int i = 0; title[i]; i++) {
        if (title[i] == '\n') {
            title[i] = '\0';
            break;
        }
    }
    scanf("%d", &pages);
    
    // TODO: Gunakan create_book untuk membuat buku baru dengan nilai yang diberikan
    
    // TODO: Tampilkan informasi buku dalam format yang diminta:
    // Judul: {title}
    // Halaman: {pages}
    
    // TODO: Jangan lupa bebaskan memori yang dialokasikan setelah selesai
    
    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