Daire Uygulaması
Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 45 / 61.
Görev
KolayTemel Shape yapısını (struct) içine alan ve kendi çizim ve alan mantığını sağlayan somut bir şekil olan Circle yapısını uygulayarak Shape Drawer projesini oluşturmaya devam edelim.
Önceki dersteki temel üzerine inşa ederek, projenizi şu dosyalarla genişleteceksiniz:
shape.h:DrawFuncveAreaFuncfonksiyon göstericisi (function pointer) türlerini içeren önceki dersteki temelShapearayüzünüzü koruyun.circle.h:Circleyapınızı burada tanımlayın. Bir daire,Shapeyapısını ilk üyesi olarak içine alır (yukarı doğru dönüştürme - upcasting için ilk üye kuralını etkinleştirir) vedoubletüründe birradiusalanı ekler. Bir yarıçap alan ve değer olarak birCircledöndürencreate_circleyapıcı (constructor) fonksiyonunu bildirin.circle.c: Daireye özgü davranışı burada uygulayın:draw_circle—Drawing Circle with radius: X.XXyazdırır (yarıçap 2 ondalık basamakla gösterilir)area_circle— π × radius² değerini döndürür (π için3.14159kullanın)create_circle— birCirclebaşlatır, içindekiShape'in fonksiyon göstericilerinidraw_circlevearea_circlefonksiyonlarına işaret edecek şekilde bağlar, yarıçapı ayarlar ve daireyi döndürür
main.c: Her şeyi bir araya getirin. Girdi olarak bir yarıçap değeri okuyun, yapıcınızı kullanarak bir daire oluşturun, ardından içindekiShape'in fonksiyon göstericileri aracılığıyla hemdrawhem deareafonksiyonlarını çağırın. Alanı 2 ondalık basamakla yazdırın.
Programınız bir girdi alacaktır: bir radius değeri (kayan noktalı sayı olarak).
Girdi 5.0 olduğunda örnek çıktı:
Drawing Circle with radius: 5.00
Area: 78.54Girdi 3.5 olduğunda örnek çıktı:
Drawing Circle with radius: 3.50
Area: 38.48Buradaki temel nokta, Circle yapısının ilk üyesi olarak bir Shape içermesidir, böylece fonksiyon göstericilerine circle.base.draw ve circle.base.area (veya iç içe geçmiş üyeye ne isim verdiyseniz) üzerinden erişebilirsiniz. Bu fonksiyonları çağırırken, Shape üyesine bir gösterici (pointer) geçirin. Tüm başlık dosyalarında include guard kullanmayı unutmayın.
Kendin dene
#include <stdio.h>
#include "shape.h"
#include "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: create_circle kullanarak bir Circle oluşturun
// TODO: Gömülü Shape'in fonksiyon göstericisi aracılığıyla draw'u çağırın
// TODO: Gömülü Shape'in fonksiyon göstericisi aracılığıyla area'yı çağırın
// ve 2 ondalık basamakla yazdırın: "Area: %.2f\n"
return 0;
}Object Oriented Programming bölümündeki tüm dersler
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil Hiyerarşisi9Proje: Şekil Çizici
Projeye Genel BakışDaire Uygulaması