Ringkasan, class Matrix
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 47 dari 104.
Tantangan
MudahMari buat class Matrix yang menggabungkan semua teknik operator overloading yang telah kamu pelajari di bab ini. Kamu akan membuat matrix dengan fitur lengkap yang mendukung operasi aritmetika, perbandingan, akses elemen, dan output stream, semuanya melalui sintaks operator yang intuitif.
Kamu akan menyusun kodemu dalam dua file:
Matrix.h: Definisikan classMatrixyang mengelola array 2D bilangan bulat menggunakan memori dinamis. Matrix-mu harus mendukung:- Anggota privat: pointer
int**untuk data 2D, dan anggotasize_tuntuk baris dan kolom - Konstruktor yang menerima baris dan kolom, serta menginisialisasi semua elemen dengan 0
- Destruktor yang membebaskan semua memori yang dialokasikan dengan benar
- Copy constructor dan operator copy assignment (deep copy dengan pemeriksaan self-assignment)
- Getter
getRows()dangetCols()(keduanya const) - Method
set(row, col, value)untuk menetapkan elemen satu per satu - Method const
get(row, col)untuk mengambil elemen
Implementasikan operator berikut:
- Aritmetika:
+dan-untuk penjumlahan dan pengurangan matrix (mengembalikan Matrix baru berdasarkan nilai) - Perbandingan:
==dan!=untuk memeriksa apakah dua matrix memiliki dimensi yang sama dan elemen yang identik - Stream:
<<sebagai fungsi friend untuk menampilkan matrix baris demi baris, dengan elemen dipisahkan oleh spasi dan setiap baris berada di baris baru - Subskrip:
[]yang mengembalikan pointer ke sebuah baris, sehingga sintaksmatrix[row][col]bisa digunakan (sediakan versi const dan non-const)
Untuk operator aritmetika, anggap kedua matrix memiliki dimensi yang sama. Operator perbandingan harus mengembalikan
falsejika dimensinya berbeda.- Anggota privat: pointer
main.cpp: Baca input untuk membuat dan mengolah dua matrix 2x2. Format inputnya adalah:- Empat bilangan bulat untuk matrix pertama (baris demi baris): a00, a01, a10, a11
- Empat bilangan bulat untuk matrix kedua (baris demi baris): b00, b01, b10, b11
Buat dua object
Matrix(masing-masing 2 baris, 2 kolom), isi keduanya menggunakan methodset(), lalu tunjukkan penggunaan operator-operator tersebut:Format output:
Matrix A: <row0> <row1> Matrix B: <row0> <row1> A + B: <row0> <row1> A - B: <row0> <row1> A == B: <true/false> A != B: <true/false> A[0][0]: <value> A[1][1]: <value>Setiap baris harus menampilkan elemen-elemen yang dipisahkan oleh satu spasi. Cetak
trueataufalse(huruf kecil) untuk hasil perbandingan.
Contohnya, dengan input 1 2 3 4 untuk Matrix A dan 5 6 7 8 untuk Matrix B:
Matrix A:
1 2
3 4
Matrix B:
5 6
7 8
A + B:
6 8
10 12
A - B:
-4 -4
-4 -4
A == B: false
A != B: true
A[0][0]: 1
A[1][1]: 4Gunakan std::stoi() untuk konversi input. Ingat untuk mengimplementasikan != berdasarkan == agar operator-operator konsisten. Jangan lupa menyertakan header guard di file header-mu.
Coba sendiri
#include <iostream>
#include <string>
#include "Matrix.h"
using namespace std;
int main() {
// Baca input untuk matriks pertama (2x2): a00, a01, a10, a11
int a00, a01, a10, a11;
cin >> a00 >> a01 >> a10 >> a11;
// Baca input untuk matriks kedua (2x2): b00, b01, b10, b11
int b00, b01, b10, b11;
cin >> b00 >> b01 >> b10 >> b11;
// TODO: Buat dua object Matrix (masing-masing 2 baris dan 2 kolom)
// TODO: Isi matriks menggunakan method set()
// TODO: Tampilkan output Matrix A
// cout << "Matrix A:" << endl;
// Gunakan operator << untuk mencetak matriks
// TODO: Tampilkan output Matrix B
// cout << "Matrix B:" << endl;
// Gunakan operator << untuk mencetak matriks
// TODO: Tampilkan output A + B
// cout << "A + B:" << endl;
// TODO: Tampilkan output A - B
// cout << "A - B:" << endl;
// TODO: Tampilkan hasil perbandingan
// cout << "A == B: " << (gunakan operator ternary untuk true/false) << endl;
// cout << "A != B: " << (gunakan operator ternary untuk true/false) << endl;
// TODO: Tampilkan hasil akses indeks
// cout << "A[0][0]: " << ... << endl;
// cout << "A[1][1]: " << ... << endl;
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