1. 程式人生 > >C++成員變數指標的用途(使用場景)

C++成員變數指標的用途(使用場景)

<span style="font-size:18px;">#pragma 成員指標的使用場景

#include <iostream>
using namespace std;

//結構體
struct Date {
    int year;
    int month;
    int day;
    void show(){
        cout << year << ' ' << month << ' ' << day << endl;
    }
};


//我要遍歷一個數組
//這第一個引數不是傳進來一個物件 而是一個數組的首地址  第二個引數是陣列元素的個數

/*
 *
 *
 *
 
void print(Date *ds, int n){
    for (int i = 0; i < n; i++) { //遍歷陣列輸出年  如果我還要輸出月和日呢?豈不是得再寫幾個方法???
        cout << ds[i].year << endl;
    }
}

void print2(Date *ds, int n){
    for (int i = 0; i < n; i++) { //遍歷陣列輸出月
        cout << ds[i].month << endl;
    }
}


void print3(Date *ds, int n){
    for (int i = 0; i < n; i++) { //遍歷陣列輸出日
        cout << ds[i].day << endl;
    }
}
 *
 *
 *
 */

//現在我只想寫一個函式  該如何?  一般封裝方法 就是把幾個方法不同的地方封裝出來,那麼幾個方法就都可以用了  這幾個方法的不同點就在於訪問不同的成員變數,那麼我把要訪問的成員變數傳進來就可以

void print(Date *ds, int n, int Date::* pd){ //pd是一個成員變數指標
    for (int i = 0; i < n; i++) { //遍歷陣列輸出年  如果我還要輸出月和日呢?豈不是得再寫幾個方法???
        cout << ds[i].* pd<< endl;
    }  //那麼在呼叫這個函式的時候只要傳進來不同的 成員變數的地址 就可以訪問成員變量了
    
#pragma 有限制的是傳進來的地址 必須是 int型別 ,如果是double就不可以了 那隻能方法過載了!
    
}




//主函式

int main(){
    //用C語言的方式 宣告一個數組
    Date ds[5] = {{2012,1,20},{2013,2,30},{2014,3,31},{2015,12,32},{2016,13,33}};
    // C++的方式提倡的是建立物件,通過物件訪問成員變數
    
    //列印年  就要傳進年的地址
    print(ds, 5,&Date::day);
#pragma 這是成員指標一個用途
    
    

    //難點1  如何宣告 成員變數指標  (成員型別  結構型別名::*指標變數名)
    //難點2  如何獲取 成員變數地址  (&結構型別名::成員)
    
    return 0;
}
</span>