Menu
CoddyTech

Penggunaan Polimorfisme

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

challenge icon

Tantangan

Mudah

Mari 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 dasar Shape dengan tipe DrawFunc dan AreaFunc.
  • circle.h dan circle.c: Implementasi Circle dari pelajaran sebelumnya.
  • rectangle.h dan rectangle.c: Implementasi Rectangle dari pelajaran sebelumnya.
  • shape.c: Implementasikan fungsi baru bernama process_shape yang menerima pointer Shape*. Fungsi ini harus memanggil fungsi draw milik bentuk tersebut, lalu memanggil fungsi area miliknya dan mencetak hasilnya dengan 2 angka desimal dalam format Area: X.XX.
  • main.c: Tunjukkan polimorfisme dalam praktik. Baca penanda tipe bentuk (c untuk lingkaran, r untuk persegi panjang), lalu baca dimensi yang diperlukan. Buat bentuk yang sesuai, lalu berikan pointer ke member Shape yang disematkan di dalamnya kepada process_shape. Fungsi yang sama menangani kedua tipe!

Programmu akan menerima salah satu dari berikut:

  • c diikuti nilai radius, atau
  • r diikuti nilai lebar dan tinggi

Contoh output saat inputnya adalah c dan 5.0:

Drawing Circle with radius: 5.00
Area: 78.54

Contoh output saat inputnya adalah r, 4.0, dan 3.0:

Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00

Keistimewaannya 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

Latihan sendiri: Compiler C online