C++成員變數指標的用途(使用場景)
阿新 • • 發佈:2019-02-07
<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>