<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>