operator 取值與取址的重載
tags: C++ Concept
直接存取
operator T&()
與地址獲取
T* operator&()
你可以透過重載這兩個直接讓物件的存取等於物件成員的存取
如以下代碼,存取 a 的操作就完全等於存取 j 的操作
/*****************************************************************
Name :
Date : 2017/03/20
By : CharlotteHonG
Final: 2017/03/20
*****************************************************************/
#include <iostream>
#include <memory>
using namespace std;
template<typename T>
class Test{
public:
// 建構
Test(){
cout << "this=" << this << endl;
cout << "i=" << &i << endl;
cout << "j=" << &j << endl;
cout << endl;
}
public:
// 重載
operator T&(){
cout << "operator T&() : ";
return j;
}
T* operator&(){
cout << "T& operator&() : ";
return &j;
}
private:
//init since c++11
T i=1;
T j=2;
};
/*=======================================================*/
int main(int argc, char const *argv[]){
Test<int> a;
// 呼叫 operator T&()
cout << "a=" << a << endl;
// 呼叫 T* operator&()
cout << "a=" << &a << endl;
// 在已經被重載的情況下取得真實地址
cout << "real add=" << addressof(a) << endl;
return 0;
}
/*=======================================================*/
執行結果
this=0x61fe30
i=0x61fe30
j=0x61fe34
operator T&() : a=2
T& operator&() : a=0x61fe34
real add=0x61fe30