小记:静默如初,安之若素
//了解
1. 成员变量指针
- 定义
类型 * 指针变量 = &变量;(普通指针)
类型 类名::* 指针变量 = &类名::变量;(成员变量指针)
- 使用
对象.*成员指针变量名;
注:”.*“称为成员指针解引用操作符
对象指针->*成员指针变量名;
注:”->*“成为间接成员指针解引用操作符
1 #include <iostream>
2 using namespace std;
3
4 class Student
5 {
6 public:
7 Student(const string &name):m_name(name){}
8 string m_name;
9 };
10
11 int main(void)
12 {
13 string Student::*pname = &Student::m_name;
14 Student s("red1");//栈对象
15 Student *ps = new Student("red2");//堆区对象
16
17 cout << s.*pname << endl;
18 cout << ps->*pname << endl;
19 delete ps;
20
21 return 0;
22 }
2.成员函数指针
1.定义
普通函数指针:
返回类型 (*函数指针)(形参表) = &函数名;
void foo(){}
cout << (void*)foo << endl;
cout << (void*)&foo << endl;
//上述两种情况等价
返回类型 (类名::*成员函数指针)(形参表) = &类名::成员函数名;
注:普通函数指针对应的”&“可加可不加;成员函数指针对应的取地址符”&“必须加;
2.使用
(对象.*成员指针变量名)(实参表);
注:”.*“称为成员指针解引用操作符
(对象指针->*成员指针变量名)(实参表);
注:”->*“成为间接成员指针解引用操作符
1 #include <iostream>
2 using namespace std;
3
4 class Student
5 {
6 public:
7 Student(const string &name):m_name(name){}
8 void who(void)
9 {
10 cout << "name : " << m_name << endl;
11 }
12 string m_name;
13 };
14
15 int main(void)
16 {
17 void (Student::*pwho)(void) = &Student::who;
18 Student s("red1");//栈对象
19 Student *ps = new Student("red2");//堆区对象
20
21 (s.*pwho)();
22 (ps->*pwho)();
23
24 delete ps;
25 return 0;
26 }