类成员指针和类成员变量指针

举报
无敌清风蓝 发表于 2023/08/02 15:28:09 2023/08/02
【摘要】 类成员指针

1类成员指针

1.1对于普通成员函数

定义普通成员函数指针: 类名::*函数指针变量名字
获取类成员函数地址: &类名::成员函数名
class Test
{
    public:
        void myfunc(int temp) { };
}
在main主函数中
void (Test:: *pfunc)(int); //类成员函数指针变量的定义,变量名字是pfunc
pfunc = &Test::myfunc; //类成员函数指针变量被赋值
对于类对象调用成员函数: 类对象名.*函数指针变量名字
对于类对象指针调用成员函数: 指针名->*函数指针变量名字
CT ct, *pct;
pct = &ct;
(ct.*pfunc)(100);
(pct->*pfunc)(200);

1.2对于虚成员函数

和普通成员函数调用方法一样,只不过这个指针指向的是虚函数地址,因为类中有虚函数,会产生一个虚函数表

1.3对于静态成员函数

声明静态成员函数指针: *函数指针变量名
获取类成员函数地址: &类名::成员函数名
因为静态成员是跟着类走的,所以在类里相当于是全局的,所以不用再用类名::来限定作用域
void (* myfpointstatic)(int) = &CT::staticfunc; //定义一个静态的类成员函数指针并给初值
myfpointstatic(100); //直接使用静态成员函数指针名即可调用静态成员函数

2.类成员变量指针

2.1对于普通成员变量

public:
    int m_a;
在main主函数中
int CT::*mp = &CT::m_a;
跟踪调试发现这个指针并不是真正意义的指针,他不是指向内存的地址,而是这个成员变量和该类对象首地址之间的偏移量

2.2对于静态成员变量

则是一个真正的地址,当然也不用加CT这个类作用域
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。