Menu
Coddy logo textTech

Özet - Şekil Hesaplayıcı

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

challenge icon

Görev

Kolay

Polimorfizm hakkında öğrendiğiniz her şeyi bir araya getiren bir şekil hesaplayıcı oluşturalım. Soyut bir Shape sınıfı oluşturacak ve alanlarını ve çevrelerini hesaplayan somut şekiller uygulayacaksınız; bunların tümüne ortak bir arayüz üzerinden erişilebilecek.

Kodunuzu dört dosyaya ayıracaksınız:

  • Shape.h: Tüm şekiller için şablon görevi gören soyut bir Shape sınıfı tanımlayın. Temel sınıfınız şunlara sahip olmalıdır:
    • Şekli tanımlamak için korumalı bir std::string name üyesi
    • name değerini başlatan bir kurucu
    • area() döndüren saf sanal perimeter() ve double metotları
    • Şeklin name değerini döndüren bir getName() metodu
    • Sanal bir yıkıcı
  • Circle.h: Circle sınıfından miras alan bir Shape sınıfı uygulayın:
    • Özel bir double radius üyesi
    • Yarıçapı alan bir kurucu (name değerini "Circle" olarak ayarlayın)
    • area() metodunu şu formülü kullanarak uygulayın: 3.14159 * radius * radius
    • perimeter() metodunu şu formülü kullanarak uygulayın: 2 * 3.14159 * radius
  • Rectangle.h: Rectangle sınıfından miras alan bir Shape sınıfı uygulayın:
    • Özel double width ve double height üyeleri
    • width ve height değerlerini alan bir kurucu (name değerini "Rectangle" olarak ayarlayın)
    • area() metodunu width * height olarak uygulayın
    • perimeter() metodunu 2 * (width + height) olarak uygulayın
  • main.cpp: Dört girdi okuyun (her biri ayrı bir satırda):
    1. Circle yarıçapı (double)
    2. Rectangle genişliği (double)
    3. Rectangle yüksekliği (double)
    4. İkinci circle yarıçapı (double)

    Üç şeklin tümünü dinamik olarak oluşturun ve bunları Shape* işaretçilerinden oluşan bir dizide saklayın. Dizi üzerinde döngü kurun ve her şekil için bilgilerini şu biçimde yazdırın:

    <name>:
      Area: <area>
      Perimeter: <perimeter>

    Her şekil arasında boş bir satır yazdırın. İşiniz bittiğinde dinamik olarak ayrılan nesneleri temizleyin.

Örneğin, girdiler 5, 4, 6 ve 3 olduğunda:

Circle:
  Area: 78.5397
  Perimeter: 31.4159

Rectangle:
  Area: 24
  Perimeter: 20

Circle:
  Area: 28.2743
  Perimeter: 18.8495

Aynı printShapeInfo mantığının herhangi bir şekil türüyle nasıl çalıştığına dikkat edin. Polimorfizmin gücü budur. Kodunuz, Shape arayüzü üzerinden circle ve rectangle nesnelerini aynı şekilde işler ve her şekil kendi ölçümlerini nasıl hesaplayacağını bilir. Doğru işlev imzalarını güvence altına almak için üzerine yazılan tüm metotlarda override anahtar sözcüğünü kullanın.

Kendin dene

#include <iostream>
#include "Shape.h"
#include "Circle.h"
#include "Rectangle.h"

using namespace std;

int main() {
    // Girdileri oku
    double circleRadius1, rectWidth, rectHeight, circleRadius2;
    cin >> circleRadius1;
    cin >> rectWidth;
    cin >> rectHeight;
    cin >> circleRadius2;

    // TODO: 3 elemanlı bir Shape* işaretçi dizisi oluştur
    // Shape* shapes[3];

    // TODO: Şekilleri dinamik olarak oluştur ve diziye kaydet
    // shapes[0] = new Circle(...);
    // shapes[1] = new Rectangle(...);
    // shapes[2] = new Circle(...);

    // TODO: Diziyi döngüyle gez ve her şeklin bilgisini yazdır
    // Biçim:
    // <name>:
    //   Alan: <area>
    //   Çevre: <perimeter>
    // (şekiller arasında boş satır, ama sonuncudan sonra değil)

    // TODO: Dinamik olarak ayrılmış nesneleri temizle
    // delete shapes[i];

    return 0;
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C++ derleyicisi