C++ 类的成员函数指针
class dog{
int name;
public:
dog();
void printname();
};
dog::dog(){
cout<<"dog构造"<<endl;
};
void dog::printname() {
cout<<"dog"<<endl;
}
int nihao(){
cout<<1<<endl;
return 0;
}
int main() {
int (*func)();//普通函数指针
func=nihao;
func();
dog dog1;
dog *dogptr = &dog1;
// cout<<&dog1.printname;//报错,不能通过实例化对象获取其成员函数地址
void (dog::*p)() = &dog::printname;//只能通过 &类名::函数名 的方式得到成员函数的函数指针,这个时候不涉及任何实例化的对象,注意这里的&**
(dog1.*p)();//通过实例化的对象(this指针)使用成员函数指针
(dogptr->*p)();//调用方式2
}
普通函数的函数名就是地址,而获取成员函数地址时,需要在前面加&
,这一点容易忘
之所以要这样调用是因为
仅仅有类成员函数的内存起始地址是不够的
还要解决多重继承、虚继承而带来的类实例地址的调整问题
所以类成员函数指针在调用的时候一定要传入类实例对象
普通函数指针可以获取类中静态成员函数,赋值和上面的&dog::printname
一致
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)