Operatör Aşırı Yüklemesi nedir?
C ++ 'da operatör aşırı yüklemesini kullanarak , bir kapsamdaki bir işleç için birden fazla anlam belirtebilirsiniz. Operatör aşırı yüklemesinin amacı, kullanıcı tanımlı bir veri türü için operatörün özel bir anlamını sağlamaktır.
Operatör aşırı yükleme yardımıyla, C ++ operatörlerinin çoğunu yeniden tanımlayabilirsiniz. Tek bir operatör kullanarak farklı işlemler gerçekleştirmek için operatör aşırı yüklemesini de kullanabilirsiniz.
Bu C ++ eğitiminde şunları öğreneceksiniz:
- Operatör Aşırı Yüklemesi nedir?
- Sözdizimi
- C ++ 'da Operatör Aşırı Yüklenmesine Farklı Yaklaşımlar
- Tüm C ++ Operatörleri Aşırı Yüklenebilir mi?
- Hatırlanacak şeyler:
- Operatör Aşırı Yüklemesi Kuralları:
- Operatör Nasıl Aşırı Yüklenir:
Sözdizimi
Bir C ++ operatörünü aşırı yüklemek için, Sınıf içinde aşağıdaki gibi özel bir işlev tanımlamalısınız:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
İşte yukarıdaki söz dizimi için bir açıklama:
- Dönüş_türü, işlevin dönüş türüdür.
- Ardından, operatör anahtar sözcüğünden bahsediyorsunuz.
- Sembol, operatör sembolünün aşırı yükleneceğini belirtir. Örneğin, +, -, <, ++.
- Bağımsız değişken (ler) operatör işlevine işlevlerle aynı şekilde geçirilebilir.
Örnek 1:
#includeusing namespace std;class TestClass {private:int count;public:TestClass() : count(5) {}void operator --() {count = count - 3;}void Display() {cout << "Count: " << count; }};int main() {TestClass tc;--tc;tc.Display();return 0;}
Çıktı:
İşte kodun bir ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için kodumuza iostream başlık dosyasını dahil etmek.
- Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
- TestClass adlı bir sınıf oluşturun.
- Bir sınıf üyesini özel olarak erişilebilir olarak işaretleyen özel erişim değiştiricisini kullanın.
- Bir tamsayı değişken sayısı oluşturun. Bu değişken özel olarak erişilebilir olacaktır.
- Bir sınıf üyesini özel olarak erişilebilir olarak işaretleyen genel erişim değiştiricisini kullanın.
- Değişken sayacını 5 olarak başlatmak için bir sınıf kurucusu kullanın.
- - operatörünün anlamını aşırı yükleyin.
- Operatör, x değişkeninin değerini 1 azaltacaktır.
- Operatör aşırı yükleme bölümünün sonu. Operatöre yeni bir ad verildi.
- Display () işlevi adlı bir işlevi tanımlama.
- Display () işlevi çağrıldığında, konsoldaki diğer metnin yanında değişken sayım değerini yazdırın. }, Display () işlevinin gövdesinin sonunu işaretler.
- Sınıf gövdesinin sonu.
- Main () işlevini çağırın. Program mantığı bu fonksiyona eklenmelidir.
- TestClass sınıfının bir örneğini oluşturun ve ona tc adını verin.
- Bu, void operatörü - () işlevini çağıracaktır.
- Display () işlevini çağırmak için TestClass Sınıfının duruşunu kullanın.
- İşlev, başarıyla tamamlandığında değer döndürmelidir.
- Main () işlevinin gövdesinin sonu.
C ++ 'da Operatör Aşırı Yüklenmesine Farklı Yaklaşımlar
Aşağıdaki fonksiyon türlerinden herhangi birini uygulayarak operatör aşırı yüklemesi gerçekleştirebilirsiniz:
- Üye İşlevi
- Üye Olmayan İşlev
- Arkadaş Fonksiyonu
- Operatör aşırı yükleme fonksiyonu, bir Left operand Sınıfın bir nesnesi olduğunda bir üye fonksiyon olabilir.
- Sol işlenen farklı olduğunda, Operatör aşırı yükleme işlevi üye olmayan bir işlev olmalıdır.
Özel ve korumalı sınıf üyelerine erişmesi gerekiyorsa, operatör aşırı yükleme işlevini bir arkadaş işlevi yapabilirsiniz.
Tüm C ++ Operatörleri Aşırı Yüklenebilir mi?
Hayır. Aşırı yüklenemeyen C ++ operatörleri vardır.
Onlar içerir:
- :: -Kapsam çözünürlük operatörü
- ?: -üçlü operatör.
- . üye seçici
- Sizeof operatörü
- * -Üye işaretçi seçici
Hatırlanacak şeyler:
- Operatör aşırı yükleme ile, bir operatörün yalnızca kullanıcı tanımlı tipler (nesneler, yapılar) için çalışma şeklini yeniden tanımlayabilirsiniz. Yerleşik türler (float, char, int, vb.) İçin kullanamazsınız.
- = Ve & C ++ operatörleri varsayılan olarak aşırı yüklenmiştir. Örneğin, aynı Sınıftaki nesneleri = operatörünü kullanarak doğrudan kopyalayabilirsiniz.
- Operatör önceliği, ilişkili olarak ve operatörlerin önceliğini değiştirmez. Ancak, parantez kullanarak değerlendirmenin sırasını değiştirebilirsiniz.
- C ++ 'da aşırı yükleyemeyeceğiniz dört operatör vardır. Kapsam çözümleme operatörünü (: :), üye seçim operatörünü (.), İşlev operatörüne (. *) İşaretçi aracılığıyla üye seçimini ve üçlü operatörü (? :) içerir.
Operatör Aşırı Yüklemesi Kuralları:
Operatör Aşırı Yüklemesi için kurallar şunlardır:
- Çalışması için en az bir işlenen, kullanıcı tanımlı bir sınıf nesnesi olmalıdır.
- Yalnızca mevcut operatörleri aşırı yükleyebilirsiniz. Yeni operatörleri aşırı yükleyemezsiniz.
- Bazı operatörler bir arkadaş işlevi kullanılarak aşırı yüklenemez. Bununla birlikte, bu tür operatörler üye işlevi kullanılarak aşırı yüklenebilir.
Operatör Nasıl Aşırı Yüklenir:
Örnek 1:
#includeusing namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}
Çıktı:
İşte kodun bir ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için kodumuza iostream başlık dosyasını dahil etmek.
- Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
- OperatorOverload adlı bir sınıf oluşturun.
- Bir sınıf üyesini özel olarak erişilebilir olarak işaretleyen özel erişim değiştiricisini kullanın.
- Bir tamsayı değişkeni x oluşturun. Bu değişken özel olarak erişilebilir olacaktır.
- Bir sınıf üyesini özel olarak erişilebilir olarak işaretleyen genel erişim değiştiricisini kullanın.
- Değişken x'i 10'a başlatmak için bir sınıf kurucusu kullanın.
- ++ operatörünün anlamını aşırı yükleyin.
- Operatör, x değişkeninin değerini 2 ile artıracaktır.
- Operatör aşırı yükleme bölümünün sonu. Operatöre yeni bir ad verildi.
- Yazdır () işlevinin çağrılması.
- Print () işlevi çağrıldığında, konsolda diğer metnin yanında değişken x'in değerini yazdırın.
- Print () işlevinin gövdesinin sonu.
- Sınıf gövdesinin sonu.
- Main () işlevini çağırın. Program mantığı bu fonksiyona eklenmelidir.
- Ov adlı OperatorOverload Sınıfının bir örneğini oluşturun.
- Bu void operatörü ++ () işlevini çağıracaktır.
- Print () işlevini çağırmak için OperatorOverload sınıfının duruşunu kullanın.
- İşlev, başarıyla tamamlandığında değer döndürmelidir.
- Main () işlevinin gövdesinin sonu.
Örnek 2:
#includeusing namespace std;class TestClass {private:int real, over;public:TestClass(int rl = 0, int ov = 0) {real = rl;over = ov;}TestClass operator + (TestClass const &obj) {TestClass result;result.real = real + obj.real;result.over = over + obj.over;return result;}void print() {cout << real << " + i" << over << endl;}};int main(){TestClass c1(9, 5), c2(4, 3);TestClass c3 = c1 + c2;c3.print();}
Çıktı:
İşte kodun bir ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için iostream başlık dosyasını programımıza dahil etmek.
- Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
- TestClass adlı bir sınıf oluşturun. {, Sınıf gövdesinin başlangıcını gösterir.
- Değişkenleri özel olarak işaretlemek için özel erişim değiştiriciyi kullanın, yani bunlara yalnızca Sınıf içinden erişilebilir.
- Gerçek ve üstü olmak üzere iki tamsayı değişken tanımlayın.
- Yapıcıyı genel olarak işaretlemek için genel erişim değiştiricisini kullanın, yani Sınıf dışında bile erişilebilir olacaktır.
- Sınıf yapıcısını oluşturma ve değişkenleri başlatma.
- Gerçek değişkeninin değerini başlatın.
- Üzerinde değişkenin değerini başlatın.
- Yapıcı gövdesinin sonu.
- + Operatörünün anlamını geçersiz kılın.
- TestClass türünün veri türü sonucunu oluşturun.
- Karmaşık sayılarda + operatörünü kullanın. Bu satır, bir sayının gerçek kısmını başka bir sayının gerçek kısmına ekleyecektir.
- Karmaşık sayılarda + operatörünü kullanın. Bu satır, bir sayının sanal kısmını başka bir sayının sanal kısmına ekleyecektir.
- Program başarılı bir şekilde yürütüldüğünde sonuç değişkeninin değerini döndürecektir.
- + İşlecinin yeni anlamının, yani aşırı yükleme tanımının sonu.
- Print () yöntemini çağırın.
- Konsola ekledikten sonra yeni karmaşık sayıyı yazdırın.
- Print () işlevinin gövdesinin sonu.
- TestClass Sınıfı gövdesinin sonu.
- Main () işlevi çağırılıyor.
- Eklenecek hem gerçek hem de karmaşık parçaların değerlerinin aktarılması. C1'in ilk bölümü c2'nin ilk bölümü olan 9 + 4'e eklenecektir. C1'in ikinci bölümü c'nin ikinci bölümü olan 5 + 3'e eklenecektir.
- Aşırı yüklenmiş + operatörünü kullanarak bir işlem gerçekleştirme ve sonucu değişken c3'e kaydetme.
- Konsolda c3 değişkeninin değerini yazdırmak.
- Main () işlevinin gövdesinin sonu.
Özet:
- Bir kapsamda bir C ++ operatörü için birden fazla anlam belirtebilirsiniz.
- Buna operatör aşırı yükleme denir.
- Operatör aşırı yükleme, kullanıcı tanımlı bir veri türü için operatörün özel bir anlamını sağlar.
- Operatör aşırı yükleme yoluyla C ++ operatörlerinin çoğunu yeniden tanımlayabilirsiniz.
- Tüm C ++ operatörleri aşırı yüklenemez.
- Bir operatörün aşırı yüklenmesi için, işlenenlerden en az birinin kullanıcı tanımlı bir nesne olması gerekir.
- Yalnızca mevcut operatörler aşırı yüklenebilir. Yeni operatörleri aşırı yükleyemezsiniz.