2017年3月20日 星期一

operator 取值與取址的重載

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

沒有留言:

張貼留言