自增++運算符
#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }};
int main() {CGirl g1;g1.show();return 0;
}
現在我們重載一個++運算符
#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }void operator++() {ranking++;}};
int main() {CGirl g1;++g1;g1.show();return 0;
}
main函數里的g1++不行但是++g1就行了;
然而你++(++g)不行,你讓你重載函數返回對象的引用就可以了;
#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }CGirl & operator++() {ranking++;return *this;}};
int main() {CGirl g1;++(++g1);g1.show();return 0;
}
上面這是自增運算符的前置,我們再來個后置的;
c++規定重載自增&自減運算符,如果重載函數有一個int形參,編譯器處理后置表達式時將調用這個重載函數。
#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }CGirl & operator++(int ) {ranking++;return *this;}};
int main() {CGirl g1;g1++;g1.show();return 0;
}
這樣就ok了;
-----------------------------------------------------------------------------------------------------------------------
整數的話不可以后自增嵌套,前自增嵌套可以;
#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }CGirl& operator++(int ) {ranking++;return *this;}};
int main() {CGirl g1,g2;g2=g1++;g2.show();g1.show();return 0;
}
name : zhongge , ranking : 6name : zhongge , ranking : 6
C:\Users\33007\source\repos\ConsoleApplication8\x64\Debug\ConsoleApplication8.exe (進程 9820)已退出,代碼為 0。
按任意鍵關閉此窗口. . .
顯然你g1++是后來加,g2應該是g1之前的值而不是增后的值。
所以改一下后++的代碼;
CGirl operator++(int ) {CGirl tmp = *this;ranking++;return tmp;
}
?函數的返回值不能是引用,成員函數的臨時對象不能引用;
name : zhongge , ranking : 5name : zhongge , ranking : 6
C:\Users\33007\source\repos\ConsoleApplication8\x64\Debug\ConsoleApplication8.exe (進程 15512)已退出,代碼為 0。
按任意鍵關閉此窗口. . .
這樣功能就對上了;