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 berfitur lengkap yang mendukung operasi aritmetika, perbandingan, akses elemen, dan output stream, semuanya menggunakan 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 private: pointer
int**untuk data 2D, serta anggotasize_tuntuk baris dan kolom - Constructor yang menerima baris dan kolom, lalu menginisialisasi semua elemen dengan 0. Alokasikan array pointer baris, lalu setiap baris:
data = new int*[rows];dandata[r] = new int[cols];untuk setiap barisr - Destructor yang membebaskan semua memori yang dialokasikan dengan benar: lakukan
delete[]pada setiap baris terlebih dahulu, laludelete[] data; - Copy constructor dan operator copy assignment (salinan mendalam dengan pemeriksaan self-assignment)
- Getter
getRows()dangetCols()(keduanya const) - Method
set(row, col, value)untuk mengatur elemen satu per satu - Method
get(row, col)const 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 pada baris baru - Subskrip:
[]yang mengembalikan pointer ke suatu baris sehingga memungkinkan sintaksmatrix[row][col](sediakan versi const dan non-const)
Untuk operator aritmetika, anggap kedua matrix memiliki dimensi yang sama. Operator perbandingan harus mengembalikan
falsejika dimensinya berbeda.- Anggota private: pointer
main.cpp: Baca input untuk membuat dan memanipulasi dua matrix 2x2. Format inputnya:- 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 dan 2 kolom), isi keduanya menggunakan methodset(), lalu tunjukkan operator yang kamu buat: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 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]: 4Ingat untuk mengimplementasikan != berdasarkan == agar operator-operator kodemu tetap konsisten. Jangan lupa menambahkan header guard ke 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 subskrip
// 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