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.
Görev
KolayBu 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 birMatrixsı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çinsize_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 herrsatırı içindata[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ındandelete[] data; - Bir kopyalama kurucusu ve kopyalama atama operatörü (derin kopya ve kendine atama kontrolüyle)
getRows()vegetCols()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
falsedöndürmelidir.- Özel üyeler: 2 boyutlu veri için bir
main.cpp: İki 2x2 matris oluşturup üzerinde işlem yapmak için girdi oku. Girdi biçimi şöyledir:- İlk matris için dört tam sayı (satır satır): a00, a01, a10, a11
- İkinci matris için dört tam sayı (satır satır): b00, b01, b10, b11
İki
Matrixnesnesi 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
trueveyafalse(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]: 4Operatö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
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarC++ Derleme ve Derleme SüreciHeader Dosyaları ve Kaynak DosyalarıNamespace'ler ve KapsamC++'ta Nesne Yönelimli Programlamaya GirişSınıflar ve Nesneler'this' İşaretçisiMetotlar (Üye Fonksiyonlar)Öznitelikler (Veri Üyeleri)Ctor ve Dtor TemelleriTekrar - Basit Hesap Makinesi4Sınıf Özellikleri
Nesne ve Statik ÜyelerGetter ve Setter'larconst Üye Fonksiyonlarımutable Anahtar SözcüğüStatik Metotlar ve DeğişkenlerFriend Fonksiyonlar ve SınıflarÖzet - Banka Hesabı Yöneticisi7Kalıtım
Temel KalıtımKalıtım Erişim DüzeyleriCtor ve Dtor Çağrı SırasıMetot Geçersiz KılmaVirtual Fonksiyonlar ve VTableÇoklu KalıtımVirtual KalıtımÖzet - Çalışan Hiyerarşisi2Bellek Yönetimi
Stack ve Heap Belleğiİşaretçiler ve ReferanslarDinamik Bellek (new/delete)C++’ta Akıllı İşaretçilerC++’ta RAIIÖzet - Dinamik Dizi Yöneticisi5Kapsülleme
C++'ta Erişim BelirleyicileriErişim Belirleyicilerine Derinlemesine BakışBilgi GizlemeStruct ve Class Karşılaştırmasıİç İçe ve İç SınıflarTekrar - Öğrenci Kayıt Sistemi8Çok Biçimlilik
Derleme Zamanı ve Çalışma Zamanı Çok BiçimliliğiFonksiyon Aşırı YüklemeSanal Fonksiyonlara Yeniden BakışSaf Sanal FonksiyonlarSoyut SınıflarC++'ta Arayüz TasarımıDinamik Tür Dönüştürme ve RTTITekrar - Şekil Hesaplayıcı11İleri Düzey OOP Kavramları
Bileşim ve KalıtımCRTP ile Mixin'lerPimpl İdiomuTür SilmeEnum Sınıfları ve Güçlü TürlemeOOP'de İstisna YönetimiÖzel İstisna Hiyerarşileri14Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik KalıpBir Kalıp Olarak RAII3Yapıcılar ve Yıkıcılar
Varsayılan YapıcıParametreli YapıcıKopyalama YapıcısıTaşıma YapıcısıYapıcı Başlatma ListeleriYönlendiren YapıcılarYıkıcıları Derinlemesine İncelemeÜç / Beş / Sıfır KuralıÖzet - String Sınıfı6Operatör Aşırı Yükleme
Operatör Aşırı Yüklemeye GirişAritmetik Operatörleri Aşırı YüklemeKarşılaştırma Operatörlerini Aşırı YüklemeAkış OperatörleriAtama Operatörünü Aşırı Yükleme[] ve () Operatörlerini Aşırı YüklemeTür Dönüşüm OperatörleriTekrar - Matrix Sınıfı9Şablonlar
Fonksiyon ŞablonlarıSınıf ŞablonlarıŞablon ÖzelleştirmeDeğişken Sayıda Argüman Alan ŞablonlarSFINAE ve Tür Özelliklerinin TemelleriTekrar: Genel Amaçlı KapsayıcıKendi başına pratik yap: Online C++ derleyicisi