Özet: Şekil Hiyerarşisi
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 32 / 61.
Görev
KolayBileşim yoluyla kalıtımın gücünü gösteren eksiksiz bir şekil hiyerarşisi oluşturalım. Herhangi bir özel şeklin kalıtım alabileceği temel bir Shape türü oluşturacak, ardından bunu genişleten bir Rect tanımlayacaksın.
Kodunu üç dosyaya ayıracaksın:
shape.h: Include guard'larıyla yapı hiyerarşini tanımla. Tek birShapealanına (bir tamsayı) sahip bircoloryapısı oluştur. Ardından ilk üyesi olarakRectyapısını içeren veShapeilewidthalanlarını (ikisi de tamsayı) ekleyen birheightyapısı tanımla. Birset_colorve yeni bir renk değeri alanShape*ile birprint_rectalanRect*olmak üzere iki işlev bildir.shape.c: Her iki işlevi de uygula.set_colorişlevin temel türle çalışır. Herhangi bir şeklin rengini değiştirir.print_rectişlevin, kalıtılan renk de dahil olmak üzere dikdörtgenin tüm bilgilerini görüntüler.main.c: BirRectoluştur ve tüm alanlarını başlat. Ardından dikdörtgenini birset_colortürüne dönüştürerekShape*işlevini çağırıp yukarı dönüştürmeyi göster. Son olarak, rengin temel tür işaretçisi üzerinden değiştirildiğini doğrulamak için dikdörtgeni yazdır.
Dört girdi alacaksın: dikdörtgenin width değeri, height değeri, bir initial color ve genel işlev aracılığıyla ayarlanacak bir new color.
Ana dosyanda dikdörtgeni başlangıç değerleriyle oluştur, ardından rengini yeni değere değiştirmek için set_color işlevini kullan ( Rect* türünü Shape* türüne dönüştürmeyi unutma) ve son olarak sonucu görüntülemek için print_rect işlevini çağır.
Çıktın şöyle görünmelidir:
Width: 10
Height: 5
Color: 7Burada 10 genişlik, 5 yükseklik ve 7 başlangıç rengi değil, güncellenmiş renktir. Buradaki temel fikir, set_color işlevinin dikdörtgenler hakkında hiçbir şey bilmemesidir. Yalnızca Shape ile çalışır. Ancak ilk üye kuralı ve yukarı dönüştürme sayesinde dikdörtgeninin rengi bu genel işlev 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ştur ve tüm alanlarını başlat
// (width, height ve gömülü Shape'in rengi initial_color ile)
// TODO: Dikdörtgeni Shape*'a cast ederek set_color'ı çağır
// rengi new_color olarak değiştirmek için
// TODO: Sonucu görüntülemek için print_rect'i çağır
return 0;
}
Nesne Yönelimli Programlama 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şisiKendi başına pratik yap: Online C derleyicisi