Struct sebagai object
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 6 dari 61.
Dalam bahasa berorientasi objek, object adalah entitas yang menggabungkan data (state) dengan fungsi yang beroperasi pada data tersebut (method). C tidak memiliki object bawaan, tetapi kita dapat mencapai konsep yang sama dengan menggunakan struct dan fungsi.
Anggap struct sebagai bagian "data" dari sebuah object. Struct menyimpan keadaan: nilai-nilai yang menentukan seperti apa object saat ini:
typedef struct {
int value;
} Counter;
struct Counter ini merepresentasikan entitas dengan satu bagian state: nilainya saat ini. Untuk memberinya perilaku, kita menulis fungsi yang menerima struct sebagai parameter:
void counter_increment(Counter *c) {
c->value++;
}
int counter_get(Counter *c) {
return c->value;
}
Fungsi-fungsi ini bertindak seperti method. Fungsi-fungsi tersebut beroperasi secara khusus pada data Counter. Dengan meneruskan struct ke fungsi, kita menyimulasikan hal yang dilakukan bahasa lain secara otomatis saat kamu memanggil counter.increment().
int main() {
Counter my_counter = {0};
counter_increment(&my_counter);
printf("%d\n", counter_get(&my_counter)); // Mencetak: 1
return 0;
}
Konvensi penamaan typename_action (seperti counter_increment) membantu mengatur kodemu dan memperjelas struct mana yang menjadi bagian dari suatu fungsi. Pola ini adalah dasar pemrograman berorientasi object di C.
Tantangan
MudahMari buat module Counter sederhana yang memperlakukan struct sebagai object dengan perilaku. Kamu akan mengatur kodemu dalam tiga file untuk berlatih menggunakan pola yang menggabungkan data dengan fungsi yang mengoperasikannya.
Kamu akan membuat tiga file:
counter.h: File header yang mendeklarasikan structCounterdengan satu anggotaint value. Deklarasikan juga dua fungsi yang bertindak sebagai "method" untuk counter:counter_increment(menerima pointer ke Counter dan menaikkan nilainya sebesar 1) dancounter_get(menerima pointer ke Counter dan mengembalikan nilainya saat ini). Gunakan include guard dengan simbolCOUNTER_H.counter.c: File source yang mengimplementasikan kedua fungsi. Ingat untuk menyertakan file header-mu.main.c: File utama yang membuat Counter, melakukan operasi padanya, dan menampilkan hasilnya.
Kamu akan menerima dua input integer: nilai awal counter-mu dan jumlah berapa kali nilainya dinaikkan.
Di file utama, inisialisasi Counter dengan nilai awal, lalu panggil counter_increment sebanyak jumlah yang ditentukan. Terakhir, gunakan counter_get untuk mengambil dan mencetak nilai akhirnya.
Cetak hasilnya dengan format ini:
Final value: {result}Contohnya, dengan nilai awal 5 dan kenaikan sebanyak 3 kali, output-nya adalah:
Final value: 8Coba sendiri
#include <stdio.h>
#include "counter.h"
int main() {
// Baca input
int starting_value;
int num_increments;
scanf("%d", &starting_value);
scanf("%d", &num_increments);
// TODO: Buat Counter dan inisialisasi dengan starting_value
// TODO: Panggil counter_increment sebanyak jumlah yang ditentukan
// TODO: Gunakan counter_get untuk mengambil nilai akhir dan mencetaknya
// Format cetak: "Final value: {result}"
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