<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # C++ 程序:遞增`++`和遞減`--`運算符重載 > 原文: [https://www.programiz.com/cpp-programming/increment-decrement-operator-overloading](https://www.programiz.com/cpp-programming/increment-decrement-operator-overloading) #### 在此示例中,您將學習重載 C++ 中的遞增`++`和遞減`--`運算符。 要理解此示例,您應該了解以下 [C++ 編程](/cpp-programming "C++ tutorial")主題: * [C++ 類和對象](/cpp-programming/object-class) * [C++ 構造器](/cpp-programming/constructors) * [C++ 運算符重載](/cpp-programming/operator-overloading) * * * 在本教程中,以最佳方式重載`++`和遞減`--`運算符,即,如果`++`運算符對一個對象進行運算,則將數據成員的值增加 1,而如果`--`運算符用于對數據成員的值減小 1。 * * * ## 示例 1:無返回類型的前綴`++`遞增運算符重載 ```cpp #include <iostream> 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; } ``` **輸出** ```cpp i=0 i=1 ``` 最初,當聲明對象`obj`時,對象`obj`的數據成員`i`的值為 0(構造器將`i`初始化為 0) 。 當對`obj`進行`++`運算符操作時,將調用運算符函數`void operator++( )`,它將數據成員`i`的值增加到 1。 就您不能使用代碼的意義而言,該程序是不完整的: ```cpp obj1 = ++obj; ``` 這是因為上述程序中的運算符函數的返回類型為空。 這是上述程序的少量修改,因此您可以使用代碼`obj1 = ++obj`。 * * * ## 示例 2:帶有返回類型的前綴遞增`++`運算符重載 ```cpp #include <iostream> 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; } ``` **輸出** ```cpp i = 0 i = 0 i = 1 i = 1 ``` 這個程序類似于上面的程序。 唯一的區別是,在這種情況下,運算符函數的返回類型為`Check`,這允許同時使用兩個代碼`++obj;` `obj1 = ++obj;`。 這是因為,從運算符函數返回的`temp`被存儲在對象`obj`中。 由于運算符函數的返回類型為`Check`,因此您還可以將`obj`的值分配給另一個對象。 注意,`=`(賦值運算符)不需要重載,因為該運算符已在 C++ 庫中重載。 * * * ## 示例 3:后綴遞增`++`運算符重載 到目前為止,遞增運算符的重載只有在以前綴形式使用時才是正確的。 這是對上述程序的修改,以使此函數對于前綴形式和后綴形式均有效。 ```cpp #include <iostream> 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 <<endl; } }; int main() { Check obj, obj1; obj.Display(); obj1.Display(); // Operator function is called, only then value of obj is assigned to obj1 obj1 = ++obj; obj.Display(); obj1.Display(); // Assigns value of obj to obj1, only then operator function is called. obj1 = obj++; obj.Display(); obj1.Display(); return 0; } ``` **輸出** ```cpp i = 0 i = 0 i = 1 i = 1 i = 2 i = 1 ``` 當遞增運算符以前綴形式重載時;`Check operator ++ ()`被調用,但是當遞增運算符以后綴形式重載時;`Check operator ++ (int)`被調用。 注意,括號內的`int`。 此`int`向編譯器提供信息,它是運算符的后綴版本。 不要混淆此`int`不表示整數。 * * * ## 示例 4:遞減運算符`--`重載 遞減運算符可以像遞增運算符一樣重載。 ```cpp #include <iostream> 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 <<endl; } }; int main() { Check obj, obj1; obj.Display(); obj1.Display(); // Operator function is called, only then value of obj is assigned to obj1 obj1 = --obj; obj.Display(); obj1.Display(); // Assigns value of obj to obj1, only then operator function is called. obj1 = obj--; obj.Display(); obj1.Display(); return 0; } ``` **輸出** ```cpp i = 3 i = 3 i = 2 i = 2 i = 1 i = 2 ``` 同樣,一元運算符,例如:!,?等也可以類似的方式重載。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看