关于C++中静态成员函数的理解

C/C++中函数到底是什么?

个人觉得为了提高水平,不必纠结某些概念细节。即不用理解什么到底是什么的概念。既然提出了,个人觉得函数是一种特殊的变量,而函数指针正是

指向这种特殊变量的指针。例如,在C中。

//以下是伪代码


FuncType   funcName; // FuncType  =  函数原型


可以这样调用funcName函数。

1-->  funcName(....);

2--->(&funcName)(...);


或一个指向盖函数的函数指针。此函数指针的函数原型和funcName一样。

假设类型为:  T   (*)(...),声明如下


T  (*funcPtr)(...)   =  funcName;

T  (*funcPtr)(...)   =  &funcName;

可以如下调用:

funcPtr(...);

(*funcPtr)(...);


对函数名取地址相当于获取了指向该函数的指针(在全局的非类的成员函数的条件下)。

但是,同理,类的静态成员函数本质上并不是类的成员函数,而是非类成员函数。其调用

不依赖于对象(this指针),编译链接期间生成的函数符号的函数原型和最初一模一样,变得只是函数名。

所以类的static成员函数在使用上和上述的全局的成员函数别无二致。


可以这样声明使用:

ClassType::static_member_function(...);

obj.static_member_function(...);

(&static_member_function)(...);


声明如下:

class   ClassType

{

  public:

  T    static_member_function(...);

};


T  (*pStatic)(...) = static_member_function(...);

T  (*pStatic)(...) = &static_member_function(...);


调用可以这样:


pStatic(...);

(*pStatic)(...);

((ClassType*)0)->static_member_function(...);//因为静态成员函数等价于全局的非类成员函数,调用不依赖于对象(this指针),记住这点即可。





因为静态成员函数等价于全局的非类成员函数,调用不依赖于对象(this指针),记住这点即可。

静态成员函数很重要的一点就是作为回调函数。

静态成员函数本质是全局函数,而非成员函数。其类型是函数指针。

而真正的成员函数(非虚函数)的类型是指向成员函数的指针。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值