Özet: Şekil Hiyerarşisi
Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 32 / 61.
Görev
KolayBileşim (composition) yoluyla kalıtımın gücünü gösteren eksiksiz bir şekil hiyerarşisi oluşturalım. Herhangi bir özel şeklin miras alabileceği temel bir Shape türü oluşturacak, ardından onu genişleten bir Rect yapısı inşa edeceksiniz.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
shape.h: Struct hiyerarşinizi include guard'lar ile tanımlayın. Tek bircoloralanına (bir tamsayı) sahip birShapestruct'ı oluşturun. Ardından, ilk üyesi olarakShapeyapısını barındıran vewidthileheightalanlarını (her ikisi de tamsayı) ekleyen birRectstruct'ı tanımlayın. İki fonksiyon bildirin: BirShape*ve yeni bir renk değeri alanset_colorve birRect*alanprint_rect.shape.c: Her iki fonksiyonu da uygulayın.set_colorfonksiyonunuz temel türle çalışır; herhangi bir şeklin rengini değiştirir.print_rectfonksiyonunuz, miras alınan rengi de dahil olmak üzere dikdörtgenin tüm bilgilerini görüntüler.main.c: BirRectoluşturun ve tüm alanlarını başlatın. Ardından, dikdörtgeninizi birShape*türüne cast ederekset_colorfonksiyonunu çağırıp upcasting işlemini gösterin. Son olarak, rengin temel tür işaretçisi aracılığıyla değiştirildiğini doğrulamak için dikdörtgeni yazdırın.
Dört girdi alacaksınız: dikdörtgenin width değeri, height değeri, bir initial color (başlangıç rengi) ve genel fonksiyon aracılığıyla ayarlanacak bir new color (yeni renk).
Ana dosyanızda, dikdörtgeni başlangıç değerleriyle oluşturun, ardından rengini yeni değere değiştirmek için set_color fonksiyonunu kullanın (Rect* yapınızı Shape* yapısına cast etmeyi unutmayın) ve son olarak sonucu görüntülemek için print_rect fonksiyonunu çağırın.
Çıktınız şu şekilde görünmelidir:
Width: 10
Height: 5
Color: 7Burada 10 genişlik, 5 yükseklik ve 7 güncellenmiş renktir (başlangıç rengi değil). Buradaki temel nokta, set_color fonksiyonunun dikdörtgenler hakkında hiçbir şey bilmemesidir; yalnızca Shape ile çalışır. Yine de ilk üye kuralı ve upcasting sayesinde, dikdörtgeninizin rengi bu genel fonksiyon aracılığıyla değiştirilir.
Kendin dene
#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: Bir Rect oluşturun ve tüm alanlarını başlatın
// (width, height ve gömülü Shape'in rengini initial_color ile)
// TODO: Rengi new_color olarak değiştirmek için
// Shape*'e dönüştürülmüş dikdörtgen ile set_color'ı çağırın
// TODO: Sonucu görüntülemek için print_rect'i çağırı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şisi