c++ -> 後置++運算子過載(單目運算子)
阿新 • • 發佈:2019-02-11
我們知道一個數 a 實現自增1的方式有兩種: 1. a++ 2. ++a同樣的如果像把它應用到c++運算子過載裡面,實現類的某些屬性的自增1操作,也應該有兩種形式之前我已經給過實現前置++運算子過載的方法了,沒看過的小夥伴可以戳這裡當我們想要實現後置++運算子的時候,問題來了:前置++和後置++運算子函式重名了!(形式全為 :XX類名 operator++(引數) )如果是這樣當我們呼叫前置或者後置++運算子的時候,c++編譯器自然無法分辨出我們需要呼叫哪一個函式;如果我們還想實現兩者運算子過載的話,就要使用佔位符,( 例如: operator++(int) )換句話說,你得給其中一個operator()多傳入一個引數,讓c++編譯器知道,這是兩個不同的函式,避免出現重定義的情況;舉個例子:
#include <iostream> using namespace std; class Complex { private: int a; int b; friend Complex operator++(Complex &c1, int); public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } //成員函式實現後置 ++運算子過載 /* Complex operator++(int) { this->a++; this->b++; Complex tmp = *this; return tmp; } */ void printCom() { cout << a << "+" << b << "i" << endl; } }; //定義全域性函式 Complex operator++(Complex &c1, int) { Complex tmp = c1; c1.a++; c1.b++; return tmp; } int main() { Complex c1(1, 2), c2(3, 4); c1++; c1.printCom(); return 0; }