Şekil Kapsayıcısı
Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 48 / 61.
Görev
KolayŞekil Çizici projesini büyük finale taşıyalım! Daireler ve Dikdörtgenlerden oluşan karışık bir koleksiyonu barındıran bir şekil konteyneri oluşturacak, ardından toplam alanı hesaplamak için bunlar üzerinde döngü kuracaksınız — bu, polimorfizmin gerçek gücünü gösterecek.
Şimdiye kadar oluşturduğunuz her şeyin üzerine inşa ederek, tamamlanmış projeniz şunları içerecektir:
shape.hveshape.c: Temel Shape arayüzünüz veprocess_shapefonksiyonu.circle.hvecircle.c: Yapıcısı ve alan hesaplamasıyla birlikte Circle uygulamanız.rectangle.hverectangle.c: Yapıcısı ve alan hesaplamasıyla birlikte Rectangle uygulamanız.main.c: Sihrin gerçekleştiği yer burasıdır. Herhangi bir şekil türünü tutabilen birShape*işaretçi dizisi oluşturacaksınız. Bunu Daireler ve Dikdörtgenlerin bir karışımıyla doldurun, ardından tüm şekillerin toplam alanını hesaplamak ve görüntülemek için dizi üzerinde döngü kurun.
Programınız şu girdileri alacaktır:
- Oluşturulacak şekil sayısı
- Her şekil için: bir tür göstergesi (daire için
c, dikdörtgen içinr) ve ardından boyutları
Konteynerinizdeki her şekil için çizim çıktısını yazdırın. Tüm şekilleri işledikten sonra, toplam alanı Total Area: X.XX formatında 2 ondalık basamakla yazdırın.
3, ardından c 5.0, r 4.0 3.0, c 2.0 girdileriyle örnek:
Drawing Circle with radius: 5.00
Drawing Rectangle with width: 4.00 and height: 3.00
Drawing Circle with radius: 2.00
Total Area: 103.112, ardından r 6.0 4.0, r 3.0 2.0 girdileriyle örnek:
Drawing Rectangle with width: 6.00 and height: 4.00
Drawing Rectangle with width: 3.00 and height: 2.00
Total Area: 30.00Buradaki temel nokta, dizinizin Shape* işaretçilerini saklamasıdır — her bir öğenin aslında bir Daire mi yoksa Dikdörtgen mi olduğuyla ilgilenmez. Her bir işaretçi üzerinden draw ve area fonksiyonlarını çağırdığınızda, her şeklin nasıl oluşturulduğuna bağlı olarak doğru uygulama otomatik olarak yürütülür. İşte polimorfizm budur: tek bir döngü, tek bir arayüz, birden fazla davranış.
Dizide, somut şekillerinizin gömülü Shape üyelerine ait işaretçileri saklamanız gerekeceğini unutmayın. Daire alanı hesaplamalarında π için 3.14159 kullanın.
Önemli — şekil türü karakterini okumak: scanf("%d", &n) ile şekil sayısını okuduktan sonra, tür karakterini okumak için yapılan her sonraki çağrı, giriş tamponunda kalan yeni satır karakterini atlamalıdır. Bunu yapmak için format dizesinde başta bir boşluk kullanın:
scanf(" %c", &type); // %c'den önceki boşluğa dikkat edinBaştaki boşluk olmadan, scanf amaçlanan c veya r yerine önceki girişten kalan yeni satır karakterini okuyacak, bu da şekil türü kontrolünüzün sessizce başarısız olmasına ve çıktı üretilmemesine neden olacaktır.
Kendin dene
#include <stdio.h>
#include <stdlib.h>
#include "shape.h"
#include "circle.h"
#include "rectangle.h"
int main() {
// TODO: Şekil sayısını oku
// TODO: Daireler, dikdörtgenler ve Shape* işaretçileri için diziler ayır
// TODO: Her bir şekil üzerinde döngü kur, türünü ve boyutlarını oku,
// şekli oluştur ve shapes dizisindeki tabanına bir işaretçi sakla
// TODO: shapes dizisi üzerinde döngü kur, her bir şekil için draw fonksiyonunu çağır,
// ve toplam alanı biriktir
// TODO: Toplam alanı şu formatta yazdır: Total Area: X.XX
// TODO: Ayrılan belleği serbest bırak
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ı