運算子過載筆記
建立臨時物件
將自加後的物件賦給另一個物件,我們需要建立一個臨時物件,然後返回該物件
#include <iostream>
using namespace std;
class num
{
public:
num(){n=1;}
~num(){}
int get()const{return n;}
void set(int x){n=x;}
num operator++()
{
++n;
num t; //臨時物件t
t.set();
return t;
}
private:
int n;
};
int main()
{
return 0;
}
建立無名臨時物件
要想實現以上功能也可以不用建立一個臨時物件,假如我們有一個帶引數的建構函式,那麼我們只要這個建構函式返回即可。
#include <iostream>
using namespace std;
class num
{
public:
num(){n=1;}
num(int i){n=i;}
~num(){}
int get()const{return n;}
void set(int x){n=x;}
num operator++()
{
++n;
return num(n);
}
private:
int n;
};
int main()
{
return 0;
}
取消建立臨時物件
建立一個物件將會呼叫建構函式,來為該物件開闢記憶體空間,而銷燬該物件則要呼叫解構函式來釋放記憶體,每建立一次物件,系統都要犧牲一定的速度和記憶體空間,this指標就是當前物件的標籤,而當前物件的成員變數也會被編譯器自動貼上this標籤以證明是當前物件的,那麼只要將當前物件的成員變數自己,然後返回this指標指向的當前物件即可。
#include <iostream>
using namespace std;
class num
{
public:
num(){n=1;}
num(int i){n=i;}
num(const num &s){this->n=s.n;} //為了避免按值返回建立一個*this的臨時副本,我們最好把operator的返回值定義為按別名返回,
~num(){} //並且我們不可能只想能夠++++i這樣的操作,,既將i進行前置自加後再進行自加,因此我們有必要將它的返回值也
int get()const{return n;} //定義為常量如:
void set(int x){n=x;}
num operator++() //const num &operator(){}
{
++n;
return *this;
}
private:
int n;
};
int main()
{
return 0;
}
以上過載的是前置自加運算子,下面過載一下後置運算子。
#include <iostream>
using namespace std;
class num
{
public:
num(){n=1;}
num(int i){n=i;}
num(const num &s){this->n=s.n;}
~num(){}
int get()const{return n;}
void set(int x){n=x;}
const num &operator++() //前置自加
{
++n;
return *this;
}
const num operator++(int o) //後置自加 int o引數沒有任何實際意義,只是區分與前面的前置自加過載的區分。
{
num temp(*this); //利用先把未自加的值賦給臨時物件,然後自加值,然後返回臨時物件。由於臨時物件一旦呼叫完就會成為
++n; //找出作用域的空引用,所以不能按別名返回,得用按值返回。
return temp;
}
private:
int n;
};
int main()
{
return 0;
}
相關文章
- 初步C++運算子過載學習筆記<3> 增量遞減運算子過載C++筆記
- C++學習筆記(二) 運算子過載C++筆記
- 運算子過載
- 過載運算子
- 【python隨筆】之【運算子過載】Python
- [Lang] 運算子過載
- C++運算子過載C++
- C++ 運算子過載C++
- C++——運算子過載C++
- [C++]運算子過載C++
- C# 運算子過載C#
- Python 運算子過載Python
- Django 筆記 - 特殊運算子Django筆記
- Javascript實現運算子過載JavaScript
- python之運算子過載Python
- 指標運算子過載(* 和 ->)指標
- Python——運算子過載(1)Python
- C++ 過載運算子和過載函式C++函式
- Java學習筆記--運算子Java筆記
- Django 筆記 - 特殊運算子 2Django筆記
- C++運算子過載詳解C++
- C++中運算子的過載C++
- 瞭解下C# 運算子過載C#
- 深入C++05:運算子過載C++
- 型別轉換 運算子過載型別
- 過載運算子、解構函式函式
- C++過載的奧義之運算子過載C++
- 自學PHP筆記(五) PHP運算子PHP筆記
- MySQL筆記 —SQL運算子打椰MySql筆記
- swift 基礎筆記二(運算子)Swift筆記
- YTU-OJ-實現複數類中的加運算子過載【C++運算子過載】C++
- 重拾Kotlin(18)-運算子過載Kotlin
- Python中常見運算子過載方法Python
- Flutter學習筆記(5)--Dart運算子Flutter筆記Dart
- swift高階運算子-讀書筆記Swift筆記
- 課堂筆記 - C++ 位運算子筆記C++
- 優先佇列中過載運算子>和佇列
- 開心檔之C++ 過載運算子和過載函式C++函式