Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Membebankan Operator Penambahan ( ) untuk Kedua-dua Pra dan Selepas Kenaikan dalam C ?

Bagaimana untuk Membebankan Operator Penambahan ( ) untuk Kedua-dua Pra dan Selepas Kenaikan dalam C ?

Barbara Streisand
Lepaskan: 2024-11-02 22:38:03
asal
535 orang telah melayarinya

 How to Overload the Increment Operator (  ) for Both Pre and Post-Increment in C  ?

Lebih muatan untuk Peningkatan Pra dan Selepas: Menyelesaikan Kekaburan

Pengendali boleh dibebankan dalam C untuk melanjutkan fungsi pengendali terbina dalam untuk jenis yang ditentukan pengguna. Satu kes penggunaan biasa ialah melebihkan operator kenaikan ( ) untuk kedua-dua operasi pra dan selepas kenaikan. Walau bagaimanapun, mencapai ini tanpa menghadapi isu kekaburan adalah satu cabaran.

Pendekatan Awal: Jenis Pulangan Sama

Dalam coretan kod yang disediakan, percubaan awal membebankan operator dengan jenis pulangan yang sama (int) untuk kedua-dua sebelum dan selepas kenaikan. Walau bagaimanapun, pendekatan ini gagal disebabkan oleh sebab-sebab berikut:

  • Lebih Muatan Fungsi Berdasarkan Jenis Pemulangan:
    C tidak membenarkan lebihan fungsi berdasarkan jenis pemulangan semata-mata. Walaupun jenis hujah yang berbeza-beza boleh membezakan antara beban lampau, jenis pulangan yang berbeza sahaja tidak mencukupi.
  • Kekaburan dalam Resolusi Lebihan:
    Apabila memanggil SampleObject, pengkompil tidak boleh menentukan beban lampau yang mana gunakan kerana kedua-duanya mengembalikan jenis yang sama. Kekaburan ini menyebabkan ralat masa kompilasi.

Penyelesaian: Terlalu Beban dengan Dummy Argument

Untuk menyelesaikan kekaburan ini, versi postfix operator telah terlebih dimuatkan dengan parameter int tiruan. Pengubahsuaian ini mencapai dua matlamat:

  • Membezakan Postfix Overload:
    Parameter dummy menyediakan tandatangan unik untuk postfix overload, membezakannya daripada prefix overload.
  • Memelihara Logik Penambahan:
    Beban awalan kekal tidak berubah, menambah tika semasa dan mengembalikan rujukan kepadanya. Lebihan postfix mencipta salinan sementara tika semasa, menambahnya dan mengembalikan nilai sebelum kenaikan.

Contoh Kod:

<code class="cpp">#include <iostream>

class CSample {
 public:
  int m_iValue;     // just to directly fetch inside main()
  CSample() : m_iValue(0) {}
  CSample(int val) : m_iValue(val) {}

  // Overloading ++ for Pre-Increment
  CSample& operator++() {
    ++m_iValue;
    return *this;
  }

  // Overloading ++ for Post-Increment
  CSample operator++(int) {
    CSample tmp(*this);
    operator++(); // prefix-increment this instance
    return tmp;   // return value before increment
  }
};

int main() {
  CSample obj1(5);
  std::cout << obj1.m_iValue << std::endl; // Output: 5

  // Pre-Increment
  ++obj1;
  std::cout << obj1.m_iValue << std::endl; // Output: 6

  // Post-Increment
  CSample obj2 = obj1++;
  std::cout << obj2.m_iValue << std::endl; // Output: 6
  std::cout << obj1.m_iValue << std::endl; // Output: 7

  return 0;
}</code>
Salin selepas log masuk

Dengan melebihkan operator dengan hujah tiruan untuk versi postfix, kami menyelesaikan kekaburan dengan berkesan dan membolehkan kedua-dua kelakuan pra dan selepas kenaikan untuk jenis tersuai dalam C .

Atas ialah kandungan terperinci Bagaimana untuk Membebankan Operator Penambahan ( ) untuk Kedua-dua Pra dan Selepas Kenaikan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan