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 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 class Matrix yang mengelola array 2D bilangan bulat menggunakan memori dinamis. Matrix-mu harus mendukung:
    • Anggota private: pointer int** untuk data 2D, serta anggota size_t untuk 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]; dan data[r] = new int[cols]; untuk setiap baris r
    • Destructor yang membebaskan semua memori yang dialokasikan dengan benar: lakukan delete[] pada setiap baris terlebih dahulu, lalu delete[] data;
    • Copy constructor dan operator copy assignment (salinan mendalam dengan pemeriksaan self-assignment)
    • Getter getRows() dan getCols() (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 sintaks matrix[row][col] (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 memanipulasi dua matrix 2x2. Format inputnya:
    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 dan 2 kolom), isi keduanya menggunakan method set(), 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 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

Ingat 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

Latihan sendiri: Compiler C++ online