Artış ++ ve Azaltma - C ++ Programlamada Operatör Aşırı Yüklemesi

Bu örnekte, C ++ 'da artırma ++ ve azaltma - operatörleri aşırı yüklemeyi öğreneceksiniz.

Bu örneği anlamak için, aşağıdaki C ++ programlama konuları hakkında bilgi sahibi olmalısınız:

  • C ++ Sınıfları ve Nesneleri
  • C ++ Oluşturucular
  • C ++ Operatör Aşırı Yüklemesi

Bu öğreticide, artırma ++ ve azaltmalar - operatör, mümkün olan en iyi şekilde aşırı yüklenir, yani, bir veri üyesinin değerini 1 artırın if ++ operatörü bir nesne üzerinde çalışır ve veri üyesinin değerini 1 if - operatörü kadar azaltın kullanıldı.

Örnek 1: Önek ++ İade türü olmadan Artış İşleci Aşırı Yüklemesi

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) void operator ++() ( ++i; ) void Display() ( cout << "i=" << i << endl; ) ); int main() ( Check obj; // Displays the value of data member i for object obj obj.Display(); // Invokes operator function void operator ++( ) ++obj; // Displays the value of data member i for object obj obj.Display(); return 0; )

Çıktı

 i = 0 i = 1

Başlangıçta nesne obj bildirildiğinde, nesne obj için veri üyesi i'nin değeri 0'dır (kurucu, i'yi 0'a başlatır).

Nesnede ++ operatörü çalıştırıldığında, operatör işlevi void operator++( )çağrılır ve bu da veri üyesi i'nin değerini 1'e çıkarır.

Bu program şu anlamda tam değildir, kodu kullanamazsınız:

 obj1 = ++ obj;

Bunun nedeni, yukarıdaki programdaki operatör işlevinin dönüş türünün geçersiz olmasıdır.

İşte kodu kullanabilmeniz için yukarıdaki programın küçük bir değişikliği obj1 = ++obj.

Örnek 2: Önek Artışı ++ dönüş türü ile operatör aşırı yükleme

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) // Return type is Check Check operator ++() ( Check temp; ++i; temp.i = i; return temp; ) void Display() ( cout << "i = " << i << endl; ) ); int main() ( Check obj, obj1; obj.Display(); obj1.Display(); obj1 = ++obj; obj.Display(); obj1.Display(); return 0; )

Çıktı

 i = 0 i = 0 ben = 1 ben = 1

Bu program yukarıdakine benzer.

Tek fark, bu durumda her iki kodu da kullanmaya izin veren operatör işlevinin dönüş türünün Check olmasıdır ++obj; obj1 = ++obj;. Bunun nedeni, operatör işlevinden döndürülen temp nesnesinin nesnede saklanmasıdır.

Operatör işlevinin dönüş tipi Check olduğundan, obj değerini başka bir nesneye de atayabilirsiniz.

= (Atama operatörü) 'nin aşırı yüklenmesi gerekmediğine dikkat edin, çünkü bu operatör C ++ kitaplığında zaten aşırı yüklendi.

Örnek 3: Sonek Artışı ++ Operatör Aşırı Yüklemesi

Arttırma operatörünün bu noktaya kadar aşırı yüklenmesi, yalnızca önek biçiminde kullanılırsa geçerlidir.

Bu, yukarıdaki programın hem önek formu hem de sonek formu için çalışmasını sağlayacak şekilde değiştirilmesidir.

 #include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) Check operator ++ () ( Check temp; temp.i = ++i; return temp; ) // Notice int inside barcket which indicates postfix increment. Check operator ++ (int) ( Check temp; temp.i = i++; return temp; ) void Display() ( cout << "i = "<< i < 

Output

 i = 0 i = 0 i = 1 i = 1 i = 2 i = 1

When increment operator is overloaded in prefix form; Check operator ++ () is called but, when increment operator is overloaded in postfix form; Check operator ++ (int) is invoked.

Notice, the int inside bracket. This int gives information to the compiler that it is the postfix version of operator.

Don't confuse this int doesn't indicate integer.

Example 4: Operator Overloading of Decrement -- Operator

Decrement operator can be overloaded in similar way as increment operator.

 #include using namespace std; class Check ( private: int i; public: Check(): i(3) ( ) Check operator -- () ( Check temp; temp.i = --i; return temp; ) // Notice int inside barcket which indicates postfix decrement. Check operator -- (int) ( Check temp; temp.i = i--; return temp; ) void Display() ( cout << "i = "<< i < 

Output

 i = 3 i = 3 i = 2 i = 2 i = 1 i = 2

Also, unary operators like: !, ~ etc can be overloaded in similar manner.

Ilginç makaleler...