静态成员函数调用方式
A:: s_fun();//不需要额外传递一个参数,作为this 指针;因为静态函数,属于类,不属于具体对象。
非静态成员函数调用方式 。
非静态成员函数,属于对象,需要隐式传递 this 指针作为参数。A a;
A &ref=a;
A *ptr = &a;
int main(){
a.fun(); // 1)对象; 传递&a, 即a 的地址作为 fun的 this 指针;
ref.fun(); // 2)引用;传递&ref,也即&a 即a 的地址作为 fun的 this 指针;
ptr->fun(); // 3)指针; 传递 ptr ,也即&a 即a 的地址作为 fun的 this 指针;
return 0;
}静态成员函数,可以调用非静态成员函数,反之非静态成员函数也可以调用静态成员函数;
在静态成员函数,内部调用非静态成员函数,需要一个额外的对象,这个对象可以是任何可见的,可以访问的全局变量,静态变量(对象,引用,指针对应的对象)
也可以是静态成员函数的参数(通过对象,引用,指针),以及静态函数内部定义的局部变量。
非静态成员函数,可以直接调用静态成员函数。
非静态函数,可以隐式的通过this指针,调用除了构造析构构函数之外的,任何非静态成员函数。
也可以显示的通过this指针,调用除了构造析构构函数之外的,任何非静态成员函数。
可以调用构造函数,构造本类的其他对象。
也可以自动调用析构函数,析构本类的其他对象。
有时候甚至可以显式调用析构函数,析构某些对象。
例如:a::fun_ather(){}
a:: fun(){
fun_ather(); //隐式的通过this指针,调用其他非静态成员函数,这是下面式子的省略写法。
this-> fun_ather();//显示的通过this指针,调用其他非静态成员函数。
}
this 指针,是对象调用函数的时候,隐式传递的。因为形参表,以及实参表里面都没有直接使用this 这个参数;
所以他是隐式的自动传递的;
方式很简单,就是 a.fun(),r.fun(), ptr->fun() ,这种写法的前面那个数据中,对象的地址传递给 this。
编译器安排某种方法,传递这个参数;
例如:VC6~VC10,32Bits 采用ecx 寄存器传递this 指针。
PS:
估计,要么是你只看到书中内容的一个片段;
要么是编者,并不是很理解C++静态成员函数,非静态成员函数;静态成员函数,可以非静态成员函数;反之亦然;
只是调用方式有所不同。
1)类外函数调用成员函数
1.1)其他函数调用成员函数,调用静态成员函数,需要通过类名调用;A:: s_fun();
1.2)其他函数调用成员函数,调用非静态成员函数,通过对象调用; a.fun();r.fun();ptr->fun() ;
2)成员函数的互相调用:
2.1静态成员函数调用静态成员函数,直接用函数名 s_fun();
2.2) 非静态成员函数调用静态成员函数,直接用函数名 s_fun();
2.3非静态成员函数调用非静态成员函数,也可以直接用函数名,fun() ;这是通过this指针来调用的。
2.4)静态调用非静态,由于调用静态函数的代码,没有传递对象相关参数this指针,需要通过其他可以访问的对象来调用。
a.fun();r.fun();ptr->fun() ;作为以上所有总结,可以看下面的例子
class A
{
int x;
static A a;
public:
void fun(){};
void fun_other(){};
static void s_fun();
static void s_fun(A & ref);
};
A A::a;
A a0;
void A::s_fun()
{
a.fun();
a0.fun();
s_fun(a);
s_fun(a0);
};
void A::s_fun(A & ref)
{
ref.fun();
a.fun();
a0.fun();
}
int main()
{
A:;s_fun();
return 0;
}
lua 静态成员函数
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】链式家族的成员——循环链表与静态链表
【数据结构】第二章——线性表(8)详细介绍了循环链表与静态链表的相关内容……
数据结构 C语言 循环链表 静态链表 -
静态成员函数
静态成员变量……
C++ 静态成员 -
【静态成员/非静态成员】静态和非静态成员函数&变量
代码一: [cpp] view plain copy print ? class Point{ public:...
非静态 成员函数 静态成员函数 数据 静态成员变量