Menu
Coddy logo textTech

Özet: Şekil Hiyerarşisi

Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 32 / 61.

challenge icon

Görev

Kolay

Bileş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 bir color alanına (bir tamsayı) sahip bir Shape struct'ı oluşturun. Ardından, ilk üyesi olarak Shape yapısını barındıran ve width ile height alanlarını (her ikisi de tamsayı) ekleyen bir Rect struct'ı tanımlayın. İki fonksiyon bildirin: Bir Shape* ve yeni bir renk değeri alan set_color ve bir Rect* alan print_rect.
  • shape.c: Her iki fonksiyonu da uygulayın. set_color fonksiyonunuz temel türle çalışır; herhangi bir şeklin rengini değiştirir. print_rect fonksiyonunuz, miras alınan rengi de dahil olmak üzere dikdörtgenin tüm bilgilerini görüntüler.
  • main.c: Bir Rect oluşturun ve tüm alanlarını başlatın. Ardından, dikdörtgeninizi bir Shape* türüne cast ederek set_color fonksiyonunu ç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: 7

Burada 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