Operator Overloading: Kendi Sınıflarında Aritmetik İşlemler Tanımlama

# Operator Overloading: Kendi Sınıflarında Aritmetik İşlemler Tanımlama

Kendi oluşturduğun sınıflara `+`, `-`, `*` gibi işlemleri öğretmek istesen ne yapardın? bunu sağlayan mekanizmaya operator overloading deniyor. Mesela iki `Kompleks` sayıyı toplaman gerekiyorsa, C++ sana bu işlemi tanımlama şansı veriyor.

Operatör overloading için `operator` anahtar kelimesini kullanırsın. Hangi işlemi tanımlamak istiyorsan onun sembolünü yazarsın. Örneğin toplama için `operator+`.

İki yöntem vardır:
1. Üye fonksiyon (member function): Sınıfın içinde tanımlarsın
2. Arkadaş fonksiyon (friend function): Sınıfın dışında ama erişim hakkı olan fonksiyon

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Kompleks sayılar (gerçek + sanal bölüm) için toplama işlemi tanımlayalım:

1#include <iostream>
2using namespace std;
3
4class Kompleks {
5public:
6double reel, sanal;
7
8Kompleks(double r = 0, double s = 0): reel(r), sanal(s) {}
9
10// Toplama operatörünü tanımla
11Kompleks operator+(const Kompleks& diger) {
12return Kompleks(reel + diger.reel, sanal + diger.sanal);
13}
14
15// Çıkarma operatörünü tanımla
16Kompleks operator-(const Kompleks& diger) {
17return Kompleks(reel - diger.reel, sanal - diger.sanal);
18}
19
20void yazdir() {
21cout << reel << " + " << sanal << "i" << endl;
22}
23};
24
25int main() {
26Kompleks z1(3, 4); // 3 + 4i
27Kompleks z2(1, 2); // 1 + 2i
28
29Kompleks toplam = z1 + z2; // Operator+ çağrılır
30Kompleks fark = z1 - z2; // Operator- çağrılır
31
32cout << "Toplam: ";
33toplam.yazdir(); // Çıktı: 4 + 6i
34
35cout << "Fark: ";
36fark.yazdir(); // Çıktı: 2 + 2i
37
38return 0;
39}

Beklenen Çıktı:

1Toplam: 4 + 6i
2Fark: 2 + 2i

- `operator+` bir fonksiyon gibi davranır, yalnız `+` sembolü ile çağrılır
- Parametreyi `const` yap, böylece orijinal nesne değişmez
- Genellikle yeni bir nesne döndürürsün (z1 + z2 sonucu yeni bir Kompleks)
- `operator=`, `operator[]`, `operator()` gibi diğer operatörleri de benzer şekilde tanımlayabilirsin

Operator overloading, kodunu daha doğal ve okunaklı kılar. Matematiksel nesnelerle çalışırken özellikle kullanışlıdır.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz