Method pembantu
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 10 dari 61.
Sejauh ini, kita telah melihat fungsi yang mengubah data struct (seperti player_take_damage) dan fungsi yang hanya menampilkannya. Namun, ada kategori penting lainnya: fungsi yang menghitung nilai turunan dari anggota struct tanpa mengubah apa pun.
Perhatikan struct Rectangle yang menyimpan lebar dan tinggi. Luasnya tidak disimpan: luas dihitung saat diperlukan:
typedef struct {
double width;
double height;
} Rectangle;
double rectangle_area(const Rectangle *self) {
return self->width * self->height;
}
double rectangle_perimeter(const Rectangle *self) {
return 2 * (self->width + self->height);
}
Ini adalah method pembantu. Method ini mengambil data yang sudah ada di struct dan menghasilkan nilai baru. Perhatikan bahwa method ini menggunakan pointer const karena hanya membaca, tidak pernah menulis. Hasil perhitungannya dikembalikan, bukan disimpan di dalam struct.
Rectangle box = {5.0, 3.0};
printf("Area: %.1f\n", rectangle_area(&box)); // 15.0
printf("Perimeter: %.1f\n", rectangle_perimeter(&box)); // 16.0
Pola ini menjaga struct-mu tetap ringkas: simpan hanya data penting, lalu hitung hal lainnya saat diperlukan. Pola ini juga memastikan nilai turunan selalu konsisten dengan keadaan saat ini.
Tantangan
MudahMari buat module Circle yang menghitung nilai turunan dari data yang disimpan. Kamu akan berlatih menulis method pembantu: fungsi yang menghitung hasil dari member struct tanpa mengubahnya.
Kamu akan membuat tiga file:
circle.h: Deklarasikan structCircledengan satu memberdouble radius. Deklarasikan juga dua method pembantu:circle_area: menerima pointerconstke Circle dan mengembalikan luasnyacircle_circumference: menerima pointerconstke Circle dan mengembalikan kelilingnya
CIRCLE_H.circle.c: Implementasikan kedua method pembantu. Untuk perhitungannya, gunakan3.14159sebagai nilai pi. Rumus luasnya adalahpi * radius * radius, dan rumus kelilingnya adalah2 * pi * radius. Kedua fungsi hanya boleh membaca radius: jangan pernah mengubahnya.main.c: Buat Circle dan gunakan method pembantu untuk menghitung dan menampilkan propertinya.
Kamu akan menerima satu input: jari-jari lingkaran (sebagai double).
Di file main-mu, inisialisasi Circle dengan jari-jari yang diberikan, lalu gunakan method pembantumu untuk menghitung dan mencetak luas serta kelilingnya.
Cetak hasilnya dalam format ini:
Area: {area}
Circumference: {circumference}Gunakan %.2f untuk kedua nilai agar menampilkan dua angka di belakang koma.
Contohnya, dengan jari-jari 5.0, output-nya akan seperti ini:
Area: 78.54
Circumference: 31.42Coba sendiri
#include <stdio.h>
#include "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: Buat struct Circle dengan jari-jari yang diberikan
// TODO: Gunakan method pembantu circle_area dan circle_circumference
// untuk menghitung dan mencetak hasilnya
// Format cetak:
// printf("Area: %.2f\n", ...);
// printf("Circumference: %.2f\n", ...);
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