Menu
CoddyTech

Ringkasan, class Matrix

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

challenge icon

Tantangan

Mudah

Mari 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 class Matrix yang mengelola array 2D bilangan bulat menggunakan memori dinamis. Matrix-mu harus mendukung:
    • Anggota privat: pointer int** untuk data 2D, dan anggota size_t untuk 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() dan getCols() (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 sintaks matrix[row][col] bisa digunakan (sediakan versi const dan non-const)

    Untuk operator aritmetika, anggap kedua matrix memiliki dimensi yang sama. Operator perbandingan harus mengembalikan false jika dimensinya berbeda.

  • main.cpp: Baca input untuk membuat dan mengolah dua matrix 2x2. Format inputnya adalah:
    1. Empat bilangan bulat untuk matrix pertama (baris demi baris): a00, a01, a10, a11
    2. 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 method set(), 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 true atau false (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]: 4

Gunakan 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

Latihan sendiri: Compiler C++ online