情况一、函数指针不使用类的写法
–文件main.cpp
#include <iostream>
#include <string>
typedef void(*function)();
function assignPtr;
std::string name;
    
void Test();
void morning();
void say(std::string a);
void Test() {assignPtr = morning;}
void morning() {std::cout <<"Good morning," << name << std::endl;}
void say(std::string a) {name = a; assignPtr();};
int main() {
    Test();
    say("Miguel");
}运行结果:

情况二、函数指针使用类的写法
#include <iostream>
#include <string>
class Test {
  public:
    
    Test() {assignPtr = &Test::morning;}
    void say(std::string a) {name = a; (this->*assignPtr)();};
  private:
    typedef void(Test::*function)();
    void morning() {std::cout <<"Good morning," << name << std::endl;}
    function assignPtr;
    std::string name;
};
int main() {
    Test a;
    a.say("Miguel");
}运行结果:

主要区别在于
在类中需要正确的使用类型
typedef void(Test::*function)();
然后在创建指针和调用指针时都调整语法。Test() {assignPtr = &Test::morning;} // Get pointer-to-member
void say(std::string a) {name = a; (this->*assignPtr)();};  // Use pointer-to-member