社区
C++ 语言
帖子详情
当函数包含函数指针类型参数时,为什么当是一个类的成员函数时,要用静态的?
husl
2005-08-19 08:27:51
class A
{
A();
int fun1(int (*fun2) ())
{
---
}
int fun2() // 这样不行,如果是 static int fun2 就ok了
{
}
}
这是啥意思啊 ?
顺便帮忙解释一下静态函数的意义什么的吧
...全文
194
8
打赏
收藏
当函数包含函数指针类型参数时,为什么当是一个类的成员函数时,要用静态的?
class A { A(); int fun1(int (*fun2) ()) { --- } int fun2() // 这样不行,如果是 static int fun2 就ok了 { } } 这是啥意思啊 ? 顺便帮忙解释一下静态函数的意义什么的吧
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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了
{
}
}
基于C#与MySQL的高分课程设计:人事工资管理系统完整源码与数据库
本资源提供了一套采用C#编程语言结合MySQL数据库技术构建的企业人力资源与薪酬管理软件解决方案。该方案
包含
完整的程序源代码及配套的结构化数据存储文件,专为满足高等院校计算机相关专业课程设计或毕业设计的高标准要求而准备,其设计目标旨在获得不低于九十五分的优异评价。 整套材料经过系统化整合与严格测试,确保了各功能模块的完整性与可执行性。用户获取后无需进行额外的环境配置或代码调整,即可直接部署并启动运行。系统架构严谨,实现了对企业员工信息档案、考勤记录、绩效评估及薪资核算等核心业务流程的数字化管理,显著提升了相关事务的处理效率与准确性。 该软件工程实践案例不仅展示了C#在Windows桌面应用开发中的实际应用,也体现了MySQL在中小型数据管理场景下的稳定表现,适合作为学习现代软件开发流程与数据库设计原理的参考范例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
产品碳足迹软件,全球前10强生产商排名及市场份额(by QYResearch).pdf
产品碳足迹软件,全球前10强生产商排名及市场份额(by QYResearch).pdf
深入浅出Core Data开发
本书系统讲解了Core Data在iOS开发中的应用,涵盖数据建模、增删改查、迁移与版本控制等核心技术。通过构建真实项目,读者可掌握高效数据管理的最佳实践,理解NSManagedObject、NSFetchRequest及NSFetchedResultsController等关键
类
的工作机制。书中还融合了iCloud同步、多设备通信与高级UI设计,帮助开发者打造高性能、易维护的移动应用。适合具备基础iOS知识的进阶开发者阅读。
Rails测试实战指南
本书系统讲解Rails应用中的自动化测试实践,涵盖单元测试、功能测试、集成测试与验收测试。通过真实案例深入探讨Test::Unit、Shoulda、RSpec、Cucumber等主流测试框架的使用技巧,并介绍测试数据管理、模拟对象、覆盖率分析及遗留系统测试等关键主题。强调测试驱动开发(TDD)在提升代码质量与开发效率中的核心作用,帮助开发者构建健壮、可维护的Rails应用。
基于C++与Qt的消消乐游戏可视化系统设计与实现(附完整源码)
本资源提供一款采用C++编程语言并结合Qt图形界面框架实现的消除
类
益智游戏完整开发方案,
包含
全部可执行程序与源代码。该方案特别适用于高等院校计算机相关专业的毕业设计、课程实践或软件开发项目等教学与科研场景。项目代码结构清晰、注释详尽,且已通过系统化功能验证与稳定性测试,具备较高的可靠性与可复用性。使用者可基于现有代码框架进行功能扩展、算法优化或界面定制等二次开发,为学习面向对象程序设计、图形界面开发及游戏设计原理提供实践参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
C++ 语言
65,208
社区成员
250,517
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章