Örneklerle C ++ Operatör Aşırı Yüklemesi

İçindekiler:

Anonim

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:

#include using 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ı:

  1. İşlevlerini kullanmak için kodumuza iostream başlık dosyasını dahil etmek.
  2. Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
  3. TestClass adlı bir sınıf oluşturun.
  4. Bir sınıf üyesini özel olarak erişilebilir olarak işaretleyen özel erişim değiştiricisini kullanın.
  5. Bir tamsayı değişken sayısı oluşturun. Bu değişken özel olarak erişilebilir olacaktır.
  6. Bir sınıf üyesini özel olarak erişilebilir olarak işaretleyen genel erişim değiştiricisini kullanın.
  7. Değişken sayacını 5 olarak başlatmak için bir sınıf kurucusu kullanın.
  8. - operatörünün anlamını aşırı yükleyin.
  9. Operatör, x değişkeninin değerini 1 azaltacaktır.
  10. Operatör aşırı yükleme bölümünün sonu. Operatöre yeni bir ad verildi.
  11. Display () işlevi adlı bir işlevi tanımlama.
  12. 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.
  13. Sınıf gövdesinin sonu.
  14. Main () işlevini çağırın. Program mantığı bu fonksiyona eklenmelidir.
  15. TestClass sınıfının bir örneğini oluşturun ve ona tc adını verin.
  16. Bu, void operatörü - () işlevini çağıracaktır.
  17. Display () işlevini çağırmak için TestClass Sınıfının duruşunu kullanın.
  18. İşlev, başarıyla tamamlandığında değer döndürmelidir.
  19. 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:

  1. Üye İşlevi
  2. Üye Olmayan İşlev
  3. 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:

  1. 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.
  2. = 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.
  3. 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.
  4. 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:

#include using 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ı:

  1. İşlevlerini kullanmak için kodumuza iostream başlık dosyasını dahil etmek.
  2. Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
  3. OperatorOverload adlı bir sınıf oluşturun.
  4. Bir sınıf üyesini özel olarak erişilebilir olarak işaretleyen özel erişim değiştiricisini kullanın.
  5. Bir tamsayı değişkeni x oluşturun. Bu değişken özel olarak erişilebilir olacaktır.
  6. Bir sınıf üyesini özel olarak erişilebilir olarak işaretleyen genel erişim değiştiricisini kullanın.
  7. Değişken x'i 10'a başlatmak için bir sınıf kurucusu kullanın.
  8. ++ operatörünün anlamını aşırı yükleyin.
  9. Operatör, x değişkeninin değerini 2 ile artıracaktır.
  10. Operatör aşırı yükleme bölümünün sonu. Operatöre yeni bir ad verildi.
  11. Yazdır () işlevinin çağrılması.
  12. Print () işlevi çağrıldığında, konsolda diğer metnin yanında değişken x'in değerini yazdırın.
  13. Print () işlevinin gövdesinin sonu.
  14. Sınıf gövdesinin sonu.
  15. Main () işlevini çağırın. Program mantığı bu fonksiyona eklenmelidir.
  16. Ov adlı OperatorOverload Sınıfının bir örneğini oluşturun.
  17. Bu void operatörü ++ () işlevini çağıracaktır.
  18. Print () işlevini çağırmak için OperatorOverload sınıfının duruşunu kullanın.
  19. İşlev, başarıyla tamamlandığında değer döndürmelidir.
  20. 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ı:

  1. İşlevlerini kullanmak için iostream başlık dosyasını programımıza dahil etmek.
  2. Sınıflarını çağırmadan kullanmak için std ad alanını programımıza dahil edin.
  3. TestClass adlı bir sınıf oluşturun. {, Sınıf gövdesinin başlangıcını gösterir.
  4. 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.
  5. Gerçek ve üstü olmak üzere iki tamsayı değişken tanımlayın.
  6. 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.
  7. Sınıf yapıcısını oluşturma ve değişkenleri başlatma.
  8. Gerçek değişkeninin değerini başlatın.
  9. Üzerinde değişkenin değerini başlatın.
  10. Yapıcı gövdesinin sonu.
  11. + Operatörünün anlamını geçersiz kılın.
  12. TestClass türünün veri türü sonucunu oluşturun.
  13. 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.
  14. 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.
  15. Program başarılı bir şekilde yürütüldüğünde sonuç değişkeninin değerini döndürecektir.
  16. + İşlecinin yeni anlamının, yani aşırı yükleme tanımının sonu.
  17. Print () yöntemini çağırın.
  18. Konsola ekledikten sonra yeni karmaşık sayıyı yazdırın.
  19. Print () işlevinin gövdesinin sonu.
  20. TestClass Sınıfı gövdesinin sonu.
  21. Main () işlevi çağırılıyor.
  22. 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.
  23. Aşırı yüklenmiş + operatörünü kullanarak bir işlem gerçekleştirme ve sonucu değişken c3'e kaydetme.
  24. Konsolda c3 değişkeninin değerini yazdırmak.
  25. 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.