Yardımcı Metotlar
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 10 / 61.
Şimdiye kadar, yapı verilerini değiştiren (player_take_damage gibi) ve onları yalnızca görüntüleyen işlevleri gördük. Ancak başka bir önemli kategori daha var: hiçbir şeyi değiştirmeden yapı üyelerinden türetilmiş değerleri hesaplayan işlevler.
Genişlik ve yüksekliği depolayan bir Rectangle yapısını düşünün. Alan depolanmaz: gerektiğinde hesaplanır:
typedef struct {
double width;
double height;
} Rectangle;
double rectangle_area(const Rectangle *self) {
return self->width * self->height;
}
double rectangle_perimeter(const Rectangle *self) {
return 2 * (self->width + self->height);
}
Bunlar yardımcı metotlardır. Struct'ın mevcut verilerini alır ve yeni bir değer üretirler. Yalnızca okudukları, hiçbir zaman yazmadıkları için const işaretçileri kullandıklarına dikkat edin. Hesaplanan sonuç struct içinde saklanmak yerine döndürülür.
Rectangle box = {5.0, 3.0};
printf("Area: %.1f\n", rectangle_area(&box)); // 15.0
printf("Perimeter: %.1f\n", rectangle_perimeter(&box)); // 16.0
Bu kalıp, yapılarınızdaki gereksiz yükü azaltır: yalnızca temel verileri depolayın ve diğer her şeyi gerektiğinde hesaplayın. Ayrıca türetilmiş değerlerin mevcut durumla her zaman tutarlı olmasını sağlar.
Görev
KolayDepolanan verilerden türetilmiş değerleri hesaplayan bir Circle modülü oluşturalım. Yapı üyelerini değiştirmeden onlardan sonuç hesaplayan işlevler olan yardımcı yöntemleri yazma pratiği yapacaksınız.
Üç dosya oluşturacaksınız:
circle.h: Tek birCircleüyesine sahip birdouble radiusyapısı bildirin. Ayrıca iki yardımcı yöntem bildirin:circle_area: Circle'a yönelik birconstişaretçisi alır ve alanı döndürürcircle_circumference: Circle'a yönelik birconstişaretçisi alır ve çevreyi döndürür
CIRCLE_Hsembolüyle include guard kullanın.circle.c: Her iki yardımcı yöntemi de uygulayın. Hesaplamalar için pi değeri olarak3.14159kullanın. Alan formülüpi * radius * radius, çevre formülü ise2 * pi * radiusşeklindedir. Her iki işlev de yalnızca yarıçapı okumalıdır: onu asla değiştirmeyin.main.c: Bir Circle oluşturun ve özelliklerini hesaplayıp görüntülemek için yardımcı yöntemleri kullanın.
Bir girdi alacaksınız: dairenin radius değeri (double olarak).
Ana dosyanızda, verilen yarıçapla bir Circle başlatın, ardından alanı ve çevreyi hesaplayıp yazdırmak için yardımcı yöntemlerinizi kullanın.
Sonuçları şu biçimde yazdırın:
Area: {area}
Circumference: {circumference}Her iki değer için de iki ondalık basamak görüntülemek üzere %.2f kullanın.
Örneğin, yarıçap 5.0 olduğunda çıktı şöyle olur:
Area: 78.54
Circumference: 31.42Kendin dene
#include <stdio.h>
#include "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: Verilen yarıçap ile bir Circle struct oluştur
// TODO: Use circle_area and circle_circumference helper methods
// sonuçları hesaplamak ve yazdırmak için
// Yazdırma formatı:
// printf("Area: %.2f\n", ...);
// printf("Circumference: %.2f\n", ...);
return 0;
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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