Rangkuman: Kalkulator Bentuk
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 63 dari 104.
Tantangan
MudahMari 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 abstrakShapeyang berfungsi sebagai cetak biru untuk semua bentuk. Class dasar kamu harus memiliki:- Anggota
std::string nameyang dilindungi untuk mengidentifikasi bentuk - Konstruktor yang menginisialisasi nama
- Method virtual murni
area()danperimeter()yang mengembalikandouble - Method
getName()yang mengembalikan nama bentuk - Destructor virtual
- Anggota
Circle.h: Implementasikan classCircleyang mewarisiShape:- Anggota
double radiusprivat - Konstruktor yang menerima radius, tetapkan namanya menjadi
"Circle" - Implementasikan
area()menggunakan rumus: 3.14159 * radius * radius - Implementasikan
perimeter()menggunakan rumus: 2 * 3.14159 * radius
- Anggota
Rectangle.h: Implementasikan classRectangleyang mewarisiShape:- Anggota
double widthdandouble heightprivat - Konstruktor yang menerima width dan height, tetapkan namanya menjadi
"Rectangle" - Implementasikan
area()sebagai width * height - Implementasikan
perimeter()sebagai 2 * (width + height)
- Anggota
main.cpp: Baca empat input, masing-masing pada baris terpisah:- Radius lingkaran (double)
- Lebar persegi panjang (double)
- Tinggi persegi panjang (double)
- 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.8495Perhatikan 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
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online