当函数包含函数指针类型参数时,为什么当是一个类的成员函数时,要用静态的?

husl 2005-08-19 08:27:51

class A
{
A();

int fun1(int (*fun2) ())
{
---
}

int fun2() // 这样不行,如果是 static int fun2 就ok了
{
}

}
这是啥意思啊 ?
顺便帮忙解释一下静态函数的意义什么的吧
...全文
194 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
husl 2005-08-20
  • 打赏
  • 举报
回复
指向一个非静态成员函数的指针,需要和对象的地址绑定在一起,才能得到该
函数的绝对地址。所以这样不行。

int fun1(int (*fun2) ()) //类的成员函数默认有一个this指针.当你把fun2传递进来时,会
//出现类型不符的错误.

这里哪个对啊 ? 感觉是第一个 , 相对地址 绝对地址 能在解释一下吗 ?
zhouhuahai 2005-08-20
  • 打赏
  • 举报
回复
class A
{
A();

int fun1(int (*fun2) ()) //类的成员函数默认有一个this指针.当你把fun2传递进来时,会
//出现类型不符的错误.
{
---
}
解决方案楼上几位已经说了:
一是把int (*fun2)()改成: int(A::*fun2)()
二是将fun2改成static,因为static不属于具体的对象,故不含this指针.
foochow 2005-08-20
  • 打赏
  • 举报
回复
同意 qhfu(崩溃)
allen_zhaozhencn 2005-08-20
  • 打赏
  • 举报
回复
int fun1(int (A::*fun2) ())
{
this->*fun2( );
}
allen_zhaozhencn 2005-08-20
  • 打赏
  • 举报
回复
int fun1(int (*fun2) ()) //参数int (*fun2)() 是一个函数指针(非类成员函数指针).

由于类的static成员属于类,而不依赖于具体的对象,所以,直接传递该函数给fun1当然可以。

如果去掉static, 则变为普通的类成员函数,正如楼上的所说的那样。 类成员函数指针也必须通过对象实例化来调用。
qhfu 2005-08-19
  • 打赏
  • 举报
回复
int fun1(int (*fun2) ())
改成:
int fun1(int (A::*fun2) ())
要绑定为class A的成员函数指针。。

静态函数指针就相当于普通的非成员函数指针,所以加上static时前面那个没有错。
SmileWolf 2005-08-19
  • 打赏
  • 举报
回复
指向一个非静态成员函数的指针,需要和对象的地址绑定在一起,才能得到该
函数的绝对地址。所以这样不行。
静态成员函数是存在于对象之外的成员函数,同一个类的多个对象共享这些函数。
它们就相当于全局函数,取地址时得到的也就是绝对地址。
另外,普通成员函数在调用时,编译器都会给加上一个参数:对象的this指针。
而静态成员函数不会添加这个参数。而且静态成员函数中不能访问类的非静态
成员变量,也不能再用const、virtual修饰。
sunman1982 2005-08-19
  • 打赏
  • 举报
回复
class A
{
A();

int fun1(int (*fun2) ())//这里你想表达什么那?指向fun2得函数指针么??
{
---
}

int fun2() // 这样不行,如果是 static int fun2 就ok了
{
}

}

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧