您的位置:首页 > 其它

普通成员函数和静态成员函数

2018-03-25 19:47 274 查看
注:普通成员又名非静态成员。静态(static)成员。类成员包括数据成员和成员函数。

两者区别

1分配内存的时间不同

静态成员属于类本身,不属于具体类对象,在类加载时分配内存空间,程序结束时才消失。可以类名直接访问。

普通成员属于类对象,在类对象创建时(类的实例)才会分配内存,即动态加载内存,不用时消失。通过类对象去访问。

注:静态成员不能去访问普通成员,因为静态成员存在于普通成员之前,我们不能去访问一个内存中不存在的东西。

2是否传递this指针

普通成员函数传递this指针。实质是一个包含指向具体对象的this指针的函数,即其隐式包含一个指向当前对象的this指针。

静态成员函数不传递this指针。

注:也就是说静态成员函数不接受隐含的this指针,无法直接访问类中的非静态成员。

3成员函数间访问

普通成员可以访问静态成员;

静态成员函数只能通过对象间接引用非静态成员。

代码如下:

#include<iostream>
using namespace std;
class A{
public:
void generalFun(){//实质void generalFun(A*this)
cout<<"this is general fun"<<endl;
}
static void staticFun(A a){
a.generalFun();//实质generalFun(&a)
cout<<"this is static fun"<<endl;
}
private:
int a;
static int b;
};
int A::b=1;//静态数据成员是静态存储,必须初始化。1在类体外初始化;2使用作用域运算符表明它所属的类。
int main(){
A a;
A::staticFun(a);
return 0;
}
//运行结果如下:
this is general fun
this is static fun


注:

1静态数据成员初始化格式如下:

<数据类型> <类名>::<静态数据成员名>=<值>

引用格式:

<类名>::<静态成员名(成员数据/成员函数)>

2静态成员变量性质:

1只能被初始化一次,下次执行该语句时自动跳过。

2属于类,而非具体对象

3静态成员函数性质:

1不包含指向具体对象的this指针;

2不可以直接调用普通成员。

3类加载时分配内存空间属于类而非具体对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: