Menu
Coddy logo textTech

Özet: Şekil Hiyerarşisi

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 32 / 61.

challenge icon

Görev

Kolay

Bileş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 bir Shape alanına (bir tamsayı) sahip bir color yapısı oluştur. Ardından ilk üyesi olarak Rect yapısını içeren ve Shape ile width alanlarını (ikisi de tamsayı) ekleyen bir height yapısı tanımla. Bir set_color ve yeni bir renk değeri alan Shape* ile bir print_rect alan Rect* olmak üzere iki işlev bildir.
  • shape.c: Her iki işlevi de uygula. set_color işlevin temel türle çalışır. Herhangi bir şeklin rengini değiştirir. print_rect işlevin, kalıtılan renk de dahil olmak üzere dikdörtgenin tüm bilgilerini görüntüler.
  • main.c: Bir Rect oluştur ve tüm alanlarını başlat. Ardından dikdörtgenini bir set_color türüne dönüştürerek Shape* 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: 7

Burada 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

Kendi başına pratik yap: Online C derleyicisi