C ++函数指针在类写法对比

情况一、函数指针不使用类的写法

--文件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");
}

运行结果:

 情况二、函数指针使用类的写法

--文件main2.cpp

#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;}

    void night() {};
    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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
函数指针C语言中是一个指向函数的指针变量,它可以用来传递函数或在程序运行时动态调用函数。函数指针的声明方式如下: ```c return_type (*function_name)(argument_type1, argument_type2, ...); ``` 其中,`return_type`是函数返回值型,`function_name`是指针变量名,`argument_type1`、`argument_type2`等是函数参数型。 下面是一个简单的例子,演示如何声明和使用一个函数指针: ```c #include <stdio.h> // 声明一个函数指针型 typedef void (*func_ptr)(int); // 定义一个函数,用于接受函数指针参数 void call_func(func_ptr ptr) { printf("Calling function...\n"); ptr(123); // 调用函数指针所指向的函数 } // 定义一个函数,它将被函数指针所指向 void my_func(int value) { printf("Value is: %d\n", value); } int main() { // 声明一个函数指针变量并初始化 func_ptr ptr = &my_func; // 调用函数指针所指向的函数 call_func(ptr); return 0; } ``` 在上面的例子中,首先声明了一个函数指针型`func_ptr`,它可以指向一个没有返回值、参数为整型的函数。然后定义了两个函数,一个是`call_func`函数,它接受一个函数指针参数,用于调用函数指针所指向的函数,另一个是`my_func`函数,它将被函数指针`ptr`所指向。在`main`函数中,定义了一个函数指针变量`ptr`并初始化为`my_func`函数的地址,然后调用`call_func`函数,并将`ptr`作为参数传递给它。运行程序,输出结果如下: ``` Calling function... Value is: 123 ``` 可以看到,程序成功调用了函数指针所指向的函数,并将参数值传递给了它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树莓派centos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值