Menu
Coddy logo textTech

Özet - Matris 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ğiniz tüm operatör aşırı yükleme (operator overloading) tekniklerini bir araya getiren bir Matrix sınıfı oluşturalım. Sezgisel operatör sözdizimi aracılığıyla aritmetik işlemleri, karşılaştırmaları, eleman erişimini ve akış çıktısını destekleyen tam özellikli bir matris oluşturacaksınız.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • Matrix.h: Dinamik bellek kullanarak tam sayılardan oluşan bir 2D diziyi yöneten bir Matrix sınıfı tanımlayın. Matrisiniz şunları desteklemelidir:
    • Özel (private) üyeler: 2D veriler için bir int** işaretçisi ve satırlar ile sütunlar için size_t üyeleri
    • Satır ve sütun sayılarını alan, tüm elemanları 0 olarak başlatan bir kurucu (constructor)
    • Tahsis edilen tüm belleği uygun şekilde serbest bırakan bir yıkıcı (destructor)
    • Bir kopyalama kurucusu (copy constructor) ve kopyalama atama operatörü (copy assignment operator) (kendi kendine atama kontrolü ile derin kopyalama)
    • getRows() ve getCols() alıcıları (her ikisi de const)
    • Bireysel elemanları ayarlamak için bir set(row, col, value) metodu
    • Elemanları almak için bir get(row, col) const metodu

    Şu operatörleri uygulayın:

    • Aritmetik: Matris toplama ve çıkarma için + ve - (değer olarak yeni bir Matrix döndürün)
    • Karşılaştırma: İki matrisin aynı boyutlara ve özdeş elemanlara sahip olup olmadığını kontrol etmek için == ve !=
    • Akış (Stream): Matrisi satır satır, elemanlar arasına boşluk koyarak ve her satırı yeni bir satıra yazdıracak şekilde çıktı almak için bir arkadaş (friend) fonksiyon olarak <<
    • İndis (Subscript): Bir satıra işaretçi döndüren ve matrix[row][col] sözdizimine izin veren [] (hem const hem de const olmayan sürümleri sağlayın)

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

  • main.cpp: İki adet 2x2 matris oluşturmak ve bunları işlemek için girdi okuyun. Girdi formatı şö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şturun (her biri 2 satır, 2 sütun), bunları set() metodunu kullanarak doldurun, ardından operatörlerinizi gösterin:

    Çıktı formatı:

    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ır, tek boşluklarla ayrılmış elemanları görüntülemelidir. Karşılaştırma sonuçları için true veya false (küçük harf) yazdırın.

Örneğin, Matris A için 1 2 3 4 ve Matris B için 5 6 7 8 girdileriyle:

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

Girdi dönüşümü için std::stoi() kullanın. Operatörlerinizin tutarlı kalması için != operatörünü == cinsinden uygulamayı unutmayın. Başlık dosyanızda başlık koruyucularını (header guards) kullanmayı unutmayın.

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, 2 sütun)
    
    // TODO: set() metodunu kullanarak matrisleri doldur
    
    // TODO: Matrix A'yı yazdır
    // cout << "Matrix A:" << endl;
    // Matrisi yazdırmak için << operatörünü kullan
    
    // TODO: Matrix B'yi yazdır
    // cout << "Matrix B:" << endl;
    // Matrisi yazdırmak için << operatörünü kullan
    
    // TODO: A + B sonucunu yazdır
    // cout << "A + B:" << endl;
    
    // TODO: A - B sonucunu yazdır
    // cout << "A - B:" << endl;
    
    // TODO: Karşılaştırma sonuçlarını yazdır
    // cout << "A == B: " << (true/false için ternary kullan) << endl;
    // cout << "A != B: " << (true/false için ternary kullan) << endl;
    
    // TODO: Alt simge (subscript) erişim sonuçlarını yazdır
    // cout << "A[0][0]: " << ... << endl;
    // cout << "A[1][1]: " << ... << endl;
    
    return 0;
}

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