Menu
CoddyTech

Rangkuman: Kalkulator Bentuk

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 63 dari 104.

challenge icon

Tantangan

Mudah

Mari buat kalkulator bentuk yang menggabungkan semua hal yang sudah kamu pelajari tentang polimorfisme. Kamu akan membuat class abstrak Shape dan mengimplementasikan bentuk konkret yang menghitung luas dan kelilingnya, semuanya dapat diakses melalui antarmuka umum.

Kamu akan mengatur kodemu dalam empat file:

  • Shape.h: Definisikan class abstrak Shape yang berfungsi sebagai cetak biru untuk semua bentuk. Class dasar kamu harus memiliki:
    • Anggota std::string name yang dilindungi untuk mengidentifikasi bentuk
    • Konstruktor yang menginisialisasi nama
    • Method virtual murni area() dan perimeter() yang mengembalikan double
    • Method getName() yang mengembalikan nama bentuk
    • Destructor virtual
  • Circle.h: Implementasikan class Circle yang mewarisi Shape:
    • Anggota double radius privat
    • Konstruktor yang menerima radius, tetapkan namanya menjadi "Circle"
    • Implementasikan area() menggunakan rumus: 3.14159 * radius * radius
    • Implementasikan perimeter() menggunakan rumus: 2 * 3.14159 * radius
  • Rectangle.h: Implementasikan class Rectangle yang mewarisi Shape:
    • Anggota double width dan double height privat
    • Konstruktor yang menerima width dan height, tetapkan namanya menjadi "Rectangle"
    • Implementasikan area() sebagai width * height
    • Implementasikan perimeter() sebagai 2 * (width + height)
  • main.cpp: Baca empat input, masing-masing pada baris terpisah:
    1. Radius lingkaran (double)
    2. Lebar persegi panjang (double)
    3. Tinggi persegi panjang (double)
    4. Radius lingkaran kedua (double)

    Buat ketiga bentuk secara dinamis dan simpan dalam array berisi pointer Shape*. Lakukan perulangan pada array dan untuk setiap bentuk, cetak informasinya dengan format berikut:

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

    Cetak satu baris kosong di antara setiap bentuk. Bersihkan object yang dialokasikan secara dinamis setelah selesai.

Sebagai contoh, dengan input 5, 4, 6, dan 3:

Circle:
  Area: 78.5397
  Perimeter: 31.4159

Rectangle:
  Area: 24
  Perimeter: 20

Circle:
  Area: 28.2743
  Perimeter: 18.8495

Perhatikan bagaimana logika printShapeInfo yang sama dapat digunakan untuk tipe bentuk apa pun. Inilah kekuatan polimorfisme. Kodemu memproses lingkaran dan persegi panjang dengan cara yang sama melalui antarmuka Shape, dan setiap bentuk tahu cara menghitung ukurannya sendiri. Gunakan kata kunci override pada semua method yang dioverride untuk memastikan signature fungsi yang benar.

Coba sendiri

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

using namespace std;

int main() {
    // Baca input
    double circleRadius1, rectWidth, rectHeight, circleRadius2;
    cin >> circleRadius1;
    cin >> rectWidth;
    cin >> rectHeight;
    cin >> circleRadius2;

    // TODO: Buat array berisi 3 pointer Shape*
    // Shape* shapes[3];

    // TODO: Buat object shape secara dinamis dan simpan dalam array
    // shapes[0] = new Circle(...);
    // shapes[1] = new Rectangle(...);
    // shapes[2] = new Circle(...);

    // TODO: Lakukan perulangan pada array dan cetak informasi setiap shape
    // Format:
    // <name>:
    //   Luas: <area>
    //   Keliling: <perimeter>
    // (beri baris kosong di antara setiap shape, tetapi jangan setelah shape terakhir)

    // TODO: Bebaskan object yang dialokasikan secara dinamis
    // delete shapes[i];

    return 0;
}

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online