Ringkasan Proyek
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 44 dari 61.
Tantangan
MudahMari letakkan fondasi untuk proyek Shape Drawer dengan membuat struct dasar Shape: sebuah antarmuka yang menentukan apa saja yang dapat dilakukan oleh bentuk apa pun melalui pointer fungsi.
Kamu akan membuat dua file untuk menyiapkan sistem polimorfik ini:
shape.h: Tentukan antarmuka inti di sini. Pertama, buat deklarasi awal untuk structShape. Lalu, tentukan dua tipe pointer fungsi:DrawFunc: menerima parameterconst Shape*dan tidak mengembalikan apa punAreaFunc: menerima parameterconst Shape*dan mengembalikandouble
Shapeitu sendiri, yang berisi dua pointer fungsi:draw(bertipeDrawFunc) danarea(bertipeAreaFunc). Struct ini hanya berfungsi sebagai antarmuka. Struct ini tidak menyimpan data khusus bentuk, hanya perilaku.main.c: Tunjukkan bahwa antarmukamu berfungsi dengan membuat bentuk uji sederhana. Implementasikan dua fungsi:test_draw: mencetakDrawing test shapetest_area: mengembalikan42.0
Shape, hubungkan dengan fungsi-fungsi uji ini, lalu panggil keduanya melalui antarmuka. Cetak hasil area dengan satu angka di belakang koma.
Output-mu harus menunjukkan bahwa pointer fungsi berfungsi dengan benar:
Drawing test shape
Area: 42.0Mengapa perlu deklarasi awal? Kamu mungkin bertanya-tanya mengapa typedef struct Shape Shape; muncul sebelum struct didefinisikan secara lengkap. Ini diperlukan karena DrawFunc dan AreaFunc merujuk ke const Shape* dalam tipe parameternya, tetapi pada bagian file itu, compiler belum melihat definisi lengkap struct tersebut. Deklarasi awal memberi tahu compiler: "ada struct bernama Shape," yang cukup untuk menggunakan pointer ke struct tersebut. Definisi lengkapnya menyusul. Pola ini umum dalam C setiap kali sebuah struct perlu merujuk ke dirinya sendiri, secara langsung atau melalui pointer fungsi.
Hal penting yang perlu dipahami di sini adalah bahwa Shape tidak mengetahui apa pun tentang lingkaran atau persegi panjang. Shape hanya mengetahui bahwa setiap bentuk harus dapat draw dirinya sendiri dan menghitung area-nya. Dalam pelajaran mendatang, kamu akan membuat bentuk konkret yang menyertakan struct dasar ini dan menyediakan implementasinya sendiri. Ingat untuk menggunakan pelindung include di file header-mu.
Coba sendiri
#include <stdio.h>
#include "shape.h"
// TODO: Implementasikan fungsi test_draw
// - Menerima parameter const Shape*
// - Mencetak "Drawing test shape"
void test_draw(const Shape* shape) {
// TODO: Cetak pesan yang diminta
}
// TODO: Implementasikan fungsi test_area
// - Menerima parameter const Shape*
// - Mengembalikan 42.0
double test_area(const Shape* shape) {
// TODO: Kembalikan nilai area untuk pengujian
}
int main() {
// TODO: Buat instans Shape
// TODO: Hubungkan shape ke fungsi test_draw dan test_area
// TODO: Panggil draw melalui interface
// TODO: Panggil area melalui interface dan cetak hasilnya dengan satu angka di belakang koma
// Format: "Area: %.1f\n"
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