Penggunaan Polimorfisme
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 47 dari 61.
Tantangan
MudahMari buktikan bahwa polimorfisme benar-benar berfungsi dengan menulis fungsi yang dapat memproses sembarang bentuk melalui pointer dasar Shape*, baik bentuknya Circle maupun Rectangle.
Dengan melanjutkan implementasi Circle dan Rectangle yang sudah kamu buat, kamu akan menambahkan abstraksi yang andal: satu fungsi yang bekerja dengan semua tipe bentuk secara seragam.
Proyekmu akan mencakup file-file berikut:
shape.h: Antarmuka dasarShapedengan tipeDrawFuncdanAreaFunc.circle.hdancircle.c: Implementasi Circle dari pelajaran sebelumnya.rectangle.hdanrectangle.c: Implementasi Rectangle dari pelajaran sebelumnya.shape.c: Implementasikan fungsi baru bernamaprocess_shapeyang menerima pointerShape*. Fungsi ini harus memanggil fungsidrawmilik bentuk tersebut, lalu memanggil fungsiareamiliknya dan mencetak hasilnya dengan 2 angka desimal dalam formatArea: X.XX.main.c: Tunjukkan polimorfisme dalam praktik. Baca penanda tipe bentuk (cuntuk lingkaran,runtuk persegi panjang), lalu baca dimensi yang diperlukan. Buat bentuk yang sesuai, lalu berikan pointer ke memberShapeyang disematkan di dalamnya kepadaprocess_shape. Fungsi yang sama menangani kedua tipe!
Programmu akan menerima salah satu dari berikut:
cdiikuti nilai radius, ataurdiikuti nilai lebar dan tinggi
Contoh output saat inputnya adalah c dan 5.0:
Drawing Circle with radius: 5.00
Area: 78.54Contoh output saat inputnya adalah r, 4.0, dan 3.0:
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00Keistimewaannya adalah process_shape tidak mengetahui apakah fungsi tersebut bekerja dengan Circle atau Rectangle. Fungsi itu hanya mengenal antarmuka Shape. Dengan mengubah member Shape yang disematkan pada bentuk konkretmu menjadi Shape*, kamu dapat memberikan tipe bentuk apa pun ke satu fungsi ini. Inilah polimorfisme: satu fungsi dengan beberapa perilaku berdasarkan tipe object sebenarnya.
Ingat untuk mendeklarasikan process_shape di shape.h agar fungsi tersebut dapat dipanggil dari main.c.
Coba sendiri
#include <stdio.h>
#include "shape.h"
#include "circle.h"
#include "rectangle.h"
int main() {
// TODO: Baca satu char untuk tipe bentuk ('c' untuk lingkaran, 'r' untuk persegi panjang)
// TODO: Jika 'c', baca jari-jari, buat Circle, lalu panggil process_shape dengan bagian dasarnya
// TODO: Jika 'r', baca lebar dan tinggi, buat Rectangle, lalu panggil process_shape dengan bagian dasarnya
return 0;
}
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