1. 程式人生 > >運算子過載(18.11.17)

運算子過載(18.11.17)

一、運算子過載:自定義型別和內建型別滿足的相同的邏輯。分為兩種:
1.普通運算子過載:
1>. <運算子過載,程式碼如下:
bool operator<(int rhs) //int rhs形參作為右運算元
{
return mdata<rhs; //mdata類成員變數
}
2>.前置++的運算子過載 ,程式碼如下:
Clnt& operator++() //返回型別為&,不生成物件
{
++mdata;
return this;
}
3>. 後置++的運算子過載,程式碼如下:
const Clnt operator++(int) // 返回常物件,因為後置++不可修改
{
const Clnt tmp(mdata);
mdata++; return tmp;
}
注意事項:
前置++與後置++的區別:
a.前置++之後可被操作,給本身+;後置++不可被修改,給副本+。例如:
int i=10;
++i=20; //操作正確,分析:i=10 -> i=11 -> i=20
i++=20; //報錯:i++不可作為左運算元
b.前置++運算子過載,返回型別物件的引用;後置++運算子過載,返回型別為常物件,因為後置++不可再被修改。 4>.[]的運算子過載,程式碼如下:
int& operator[](int

parr) // int* parr引數作為右運算元
{
return parr[mdata];
}
注意事項:
在主函式中,arr[i]:arr為陣列,i為下標(也是類物件),如呼叫[]運算子過載函式,則會出現:引數不匹配,原因為 i 為類物件,當[]運算子過載函式寫入類內時,左運算元為this指向的類物件,右運算元為傳入的引數;但arr[i]呼叫時,傳 入的引數為左運算元,類物件為右運算元,無法成功呼叫,要想成功呼叫,則在呼叫點將arr[i]換成i[arr]。
2、型別過載,程式碼如下:
operator int() //int型別過載
{
return mdata;
}
程式碼示例:
#include
class Clnt{
public:
Clnt(int data=0):mdata(data){} //建構函式

/*bool operator<(int rhs) //<的運算子過載
{
return mdata<rhs;
}
*/
Clnt& operator++() //前置++的運算子過載
{
++mdata;
return this;
}
/

const Clnt operator++(int) //後置++的運算子過載
{
const Clnt tmp(mdata);
mdata++;
return tmp;
}

 int& operator[](int* parr)         //[]的運算子過載 

{
return parr[mdata];
}
*/
operator int() //int型別過載
{
return mdata;
}
int getData()
{
return mdata;
}
private:
int mdata;
};

int main()
{
int arr[]={123,21,3,4,1};
int len=sizeof(arr)/sizeof(arr[0]);
for(Clnt i=0;i<len;++i) //i.operator<(len) => i<len i.operator++() => ++i
{
std::cout<<i[arr]<<" "; //i[arr] => arr[i] i.operator
}
return 0;
}

2.型別過載:

  Markdown       0 字數     2 行數     當前行 2, 當前列 0      HTML       0 字數     0 段落           Menu     Main workspace not synced.Sign in with GoogleSync your main workspace and unlock functionalities.WorkspacesSwitch to another workspace.SynchronizeSync your files in the Cloud.PublishExport your files to the web.HistoryTrack and restore file revisions.File propertiesAdd metadata and configure extensions.    Table of contents       Markdown cheat sheet       Import from disk       Export to disk       Print       More...   文章內容不能為空釋出成功     文章摘要由系統生成寫新文章管理博文檢視文章