Özet - Operatör aşırı yükleme
- C++ kursu
- Orta seviye
- Ders 111/116
- 5 dk
aritmetik, karşılaştırma ve stream operatörlerini birleştirerek bir Vector sınıfı yazarsın.
Özet - Operatör aşırı yükleme
Bu grupta operatör aşırı yüklemeyi öğrendin. operator kelimesi ve sembol ile fonksiyon tanımlarsın; böylece sınıfın yerleşik türler gibi çalışır.
Aritmetik (+, -), karşılaştırma (==, <), stream (<<) ve spaceship (<=>) operatörlerini gördün. Şimdi iki ödevle öğrendiklerini pekiştireceksin: önce toplama operatörü, sonra eşitlik karşılaştırması.
Uygulama Vector2'ye operator+ ekle
Başlangıç kodundaki Vector2 sınıfına operator+ ekle: gövdesi return Vector2(x + other.x, y + other.y);. main içinde a + b'yi hesapla ve sonucu yazdır.
Başlangıç kodu
#include <iostream>
class Vector2 {
public:
int x;
int y;
Vector2(int x_, int y_) : x(x_), y(y_) {}
// Toplama operatörünü ekle
};
int main() {
Vector2 a(2, 3);
Vector2 b(4, 5);
// a + b'yi hesapla ve yazdır
return 0;
}Örnek çözüm
#include <iostream>
class Vector2 {
public:
int x;
int y;
Vector2(int x_, int y_) : x(x_), y(y_) {}
Vector2 operator+(const Vector2& other) const {
return Vector2(x + other.x, y + other.y);
}
};
int main() {
Vector2 a(2, 3);
Vector2 b(4, 5);
Vector2 c = a + b;
std::cout << c.x << " " << c.y;
return 0;
}Beklenen çıktı
6 8
Uygulama Score'a operator== ekle
Başlangıç kodundaki Score sınıfına operator== ekle: gövdesi return value == other.value;. main içinde a == b'yi karşılaştır; eşitse "Eşit", değilse "Farklı" yazdır.
Başlangıç kodu
#include <iostream>
class Score {
public:
int value;
Score(int v) : value(v) {}
// Eşitlik operatörünü ekle
};
int main() {
Score a(7);
Score b(7);
// a == b karşılaştır ve sonucu yazdır
return 0;
}Örnek çözüm
#include <iostream>
class Score {
public:
int value;
Score(int v) : value(v) {}
bool operator==(const Score& other) const {
return value == other.value;
}
};
int main() {
Score a(7);
Score b(7);
if (a == b) {
std::cout << "Eşit";
} else {
std::cout << "Farklı";
}
return 0;
}Beklenen çıktı
Eşit
Bölüm sonu
Operatör aşırı yüklemeyi tamamladın. Artık operator+, operator-, operator==, operator<< ve operator<=> tanımlayabiliyorsun.
Sınıfların yerleşik türler gibi doğal çalışmasını sağladın. Sonraki grupta orta seviye final projesi seni bekliyor; orada OOP, şablon, STL ve dosya I/O'yu bir araya getireceksin. Operatör aşırı yükleme, bu projede de işine yarayacak.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 operator+ hangi operatörü tanımlar?
Vector2 operator+(const Vector2& other) const;- Çıkarma
- Toplama Doğru cevap
- Karşılaştırma
- Çıktı
Açıklama: operator+ toplama operatörüdür.
2 Operatör fonksiyonu adını tamamla
Vector2 ____(const Vector2& other) const { return Vector2(x + other.x, y + other.y); }
Vector2 operator+(const Vector2& other) const { return Vector2(x + other.x, y + other.y); }
Açıklama: operator+ toplama operatörüdür.