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 dosya halinde düzenleyeceksiniz:

  • Shape.h: Tüm şekiller için taslak 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ı (protected) bir std::string name üyesi
    • İsmi başlatan bir yapıcı (constructor)
    • double döndüren saf sanal (pure virtual) area() ve perimeter() metotları
    • Şeklin ismini döndüren bir getName() metodu
    • Sanal bir yıkıcı (virtual destructor)
  • Circle.h: Shape sınıfından miras alan bir Circle sınıfı uygulayın:
    • Özel (private) bir double radius üyesi
    • Yarıçapı alan bir yapıcı (ismi "Circle" olarak ayarlayın)
    • Şu formülü kullanarak area() metodunu uygulayın: 3.14159 * radius * radius
    • Şunu kullanarak perimeter() metodunu uygulayın: 2 * 3.14159 * radius
  • Rectangle.h: Shape sınıfından miras alan bir Rectangle sınıfı uygulayın:
    • Özel (private) double width ve double height üyeleri
    • Genişlik ve yüksekliği alan bir yapıcı (ismi "Rectangle" olarak ayarlayın)
    • area() metodunu width * height olarak uygulayın
    • perimeter() metodunu 2 * (width + height) olarak uygulayın
  • main.cpp: Dört girişi okuyun (her biri ayrı bir satırda):
    1. Daire yarıçapı (double)
    2. Dikdörtgen genişliği (double)
    3. Dikdörtgen yüksekliği (double)
    4. İkinci daire yarıçapı (double)

    Her üç şekli de dinamik olarak oluşturun ve bunları bir Shape* işaretçi dizisinde saklayın. Dizide döngü kurun ve her şekil için bilgilerini şu formatta yazdırın:

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

    Her şekil arasına boş bir satır yazdırın. İşiniz bittiğinde dinamik olarak ayrılmış nesnelerinizi temizleyin.

Örneğin, 5, 4, 6 ve 3 girişleri ile:

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ü için nasıl çalıştığına dikkat edin — polimorfizmin gücü budur. Kodunuz, daireleri ve dikdörtgenleri Shape arayüzü üzerinden aynı şekilde işler ve her şekil kendi ölçümlerini nasıl hesaplayacağını bilir. Doğru fonksiyon imzalarını sağlamak için geçersiz kılınan tüm metotlarda override anahtar kelimesini 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şturun
    // Shape* shapes[3];

    // TODO: Şekilleri dinamik olarak oluşturun ve dizide saklayın
    // shapes[0] = new Circle(...);
    // shapes[1] = new Rectangle(...);
    // shapes[2] = new Circle(...);

    // TODO: Dizi boyunca döngü kurun ve her şeklin bilgisini yazdırın
    // Format:
    // <name>:
    //   Area: <area>
    //   Perimeter: <perimeter>
    // (şekiller arasında boş satır, ancak sonuncusundan sonra değil)

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

    return 0;
}

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