Rekap: Hierarki Bentuk
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 32 dari 61.
Tantangan
MudahMari buat hierarki shape lengkap yang menunjukkan kekuatan pewarisan melalui komposisi. Kamu akan membuat tipe dasar Shape yang dapat menjadi dasar bagi shape tertentu, lalu membuat Rect yang memperluasnya.
Kamu akan menyusun kodemu dalam tiga file:
shape.h: Definisikan hierarki struct dengan include guard. Buat structShapedengan satu fieldcolor(bilangan bulat). Lalu definisikan structRectyang menyertakanShapesebagai member pertamanya dan menambahkan fieldwidthsertaheight(keduanya bilangan bulat). Deklarasikan dua fungsi:set_coloryang menerimaShape*dan nilai warna baru, sertaprint_rectyang menerimaRect*.shape.c: Implementasikan kedua fungsi. Fungsiset_color-mu bekerja dengan tipe dasar. Fungsi ini mengubah warna shape apa pun. Fungsiprint_rect-mu menampilkan semua informasi persegi panjang, termasuk warna yang diwarisinya.main.c: BuatRectdan inisialisasi semua field-nya. Lalu tunjukkan upcasting dengan memanggilset_colormenggunakan persegi panjangmu yang di-cast menjadiShape*. Terakhir, cetak persegi panjang untuk memastikan warnanya telah diubah melalui pointer tipe dasar.
Kamu akan menerima empat input: width persegi panjang, height-nya, warna awal, dan warna baru yang akan ditetapkan melalui fungsi generik.
Di file utama, buat persegi panjang dengan nilai awal, lalu gunakan set_color untuk mengubah warnanya menjadi nilai baru (ingat untuk melakukan cast dari Rect* menjadi Shape*), dan terakhir panggil print_rect untuk menampilkan hasilnya.
Output-mu akan terlihat seperti ini:
Width: 10
Height: 5
Color: 7Di sini, 10 adalah width, 5 adalah height, dan 7 adalah warna yang diperbarui (bukan warna awal). Inti pentingnya adalah set_color tidak mengetahui apa pun tentang persegi panjang. Fungsi ini hanya bekerja dengan Shape. Namun, berkat aturan member pertama dan upcasting, warna persegi panjangmu dapat diubah melalui fungsi generik ini.
Coba sendiri
#include <stdio.h>
#include "shape.h"
int main() {
int width, height, initial_color, new_color;
scanf("%d", &width);
scanf("%d", &height);
scanf("%d", &initial_color);
scanf("%d", &new_color);
// TODO: Buat Rect dan inisialisasi semua field-nya
// (width, height, dan color pada Shape yang tertanam dengan initial_color)
// TODO: Panggil set_color dengan persegi panjang yang dikonversi ke Shape*
// untuk mengubah color menjadi new_color
// TODO: Panggil print_rect untuk menampilkan hasilnya
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