Menu
CoddyTech

Tekrar - Matrix Sınıfı

Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 47 / 104.

challenge icon

Görev

Kolay

Bu bölümde öğrendiğin tüm operatör aşırı yükleme tekniklerini bir araya getiren bir Matrix sınıfı oluşturalım. Aritmetik işlemleri, karşılaştırmaları, eleman erişimini ve akış çıktısını destekleyen, tüm bunları sezgisel operatör sözdizimiyle sağlayan, tüm özelliklere sahip bir matris oluşturacaksın.

Kodunu iki dosyaya ayıracaksın:

  • Matrix.h: Dinamik bellek kullanarak 2 boyutlu bir tamsayı dizisini yöneten bir Matrix sınıfı tanımla. Matrisin şunları desteklemeli:
    • Özel üyeler: 2 boyutlu veri için bir int** işaretçisi ve satır ve sütunlar için size_t üyeleri
    • Satır ve sütun alan, tüm elemanları 0 olarak başlatan bir kurucu. Satır işaretçilerinden oluşan bir dizi, ardından da her satırı ayır: data = new int*[rows]; ve her r satırı için data[r] = new int[cols];
    • Ayrılan tüm belleği düzgün şekilde serbest bırakan bir yıkıcı: önce her satır için delete[], ardından delete[] data;
    • Bir kopyalama kurucusu ve kopyalama atama operatörü (derin kopya ve kendine atama kontrolüyle)
    • getRows() ve getCols() alıcıları (ikisi de const)
    • Tek tek elemanları ayarlamak için bir set(row, col, value) yöntemi
    • Elemanları almak için bir get(row, col) const yöntemi

    Bu operatörleri uygula:

    • Aritmetik: Matris toplama ve çıkarma işlemleri için + ve - (yeni bir Matrix değer olarak döndürülür)
    • Karşılaştırma: İki matrisin aynı boyutlara ve aynı elemanlara sahip olup olmadığını kontrol etmek için == ve !=
    • Akış: Matrisi satır satır; elemanları boşluklarla ayırarak ve her satırı yeni bir satırda göstererek çıktı veren, arkadaş işlevi olarak <<
    • Alt indis: Bir satıra işaretçi döndüren ve matrix[row][col] sözdizimine olanak tanıyan [] (hem const hem const olmayan sürümlerini sağla)

    Aritmetik operatörler için her iki matrisin de aynı boyutlara sahip olduğunu varsay. Boyutlar farklıysa karşılaştırma operatörleri false döndürmelidir.

  • main.cpp: İki 2x2 matris oluşturup üzerinde işlem yapmak için girdi oku. Girdi biçimi şöyledir:
    1. İlk matris için dört tam sayı (satır satır): a00, a01, a10, a11
    2. İkinci matris için dört tam sayı (satır satır): b00, b01, b10, b11

    İki Matrix nesnesi oluştur (her biri 2 satır ve 2 sütun), set() yöntemini kullanarak elemanlarını doldur, ardından operatörlerini göster:

    Çıktı biçimi:

    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>

    Her satırdaki elemanlar tek boşluklarla ayrılmalıdır. Karşılaştırma sonuçları için true veya false (küçük harfle) yazdır.

Örneğin, Matrix A için girdi olarak 1 2 3 4 ve Matrix B: için 5 6 7 8 verildiğinde:

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

Operatörlerinin tutarlı olması için != operatörünü == cinsinden uygulamayı unutma. Başlık dosyana başlık koruyucuları eklemeyi unutma.

Kendin dene

#include <iostream>
#include <string>
#include "Matrix.h"

using namespace std;

int main() {
    // İlk matris (2x2) için girdiyi oku: a00, a01, a10, a11
    int a00, a01, a10, a11;
    cin >> a00 >> a01 >> a10 >> a11;
    
    // İkinci matris (2x2) için girdiyi oku: b00, b01, b10, b11
    int b00, b01, b10, b11;
    cin >> b00 >> b01 >> b10 >> b11;
    
    // TODO: İki Matrix nesnesi oluştur (her biri 2 satır ve 2 sütunlu)
    
    // TODO: Matrisleri set() metodunu kullanarak doldur
    
    // TODO: Matrix A'yı çıktı olarak yazdır
    // cout << "Matrix A:" << endl;
    // Matrisi yazdırmak için << operatörünü kullan
    
    // TODO: Matrix B'yi çıktı olarak yazdır
    // cout << "Matrix B:" << endl;
    // Matrisi yazdırmak için << operatörünü kullan
    
    // TODO: A + B'yi çıktı olarak yazdır
    // cout << "A + B:" << endl;
    
    // TODO: A - B'yi çıktı olarak yazdır
    // cout << "A - B:" << endl;
    
    // TODO: Karşılaştırma sonuçlarını çıktı olarak ver
    // cout << "A == B: " << (true/false için üçlü işleci kullan) << endl;
    // cout << "A != B: " << (true/false için üçlü işleci kullan) << endl;
    
    // TODO: İndisle erişim sonuçlarını çıktı olarak ver
    // cout << "A[0][0]: " << ... << endl;
    // cout << "A[1][1]: " << ... << endl;
    
    return 0;
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C++ derleyicisi