普通成员函数和静态成员函数
2018-03-25 19:47
274 查看
注:普通成员又名非静态成员。静态(static)成员。类成员包括数据成员和成员函数。
静态成员属于类本身,不属于具体类对象,在类加载时分配内存空间,程序结束时才消失。可以类名直接访问。
普通成员属于类对象,在类对象创建时(类的实例)才会分配内存,即动态加载内存,不用时消失。通过类对象去访问。
注:静态成员不能去访问普通成员,因为静态成员存在于普通成员之前,我们不能去访问一个内存中不存在的东西。
2是否传递this指针
普通成员函数传递this指针。实质是一个包含指向具体对象的this指针的函数,即其隐式包含一个指向当前对象的this指针。
静态成员函数不传递this指针。
注:也就是说静态成员函数不接受隐含的this指针,无法直接访问类中的非静态成员。
3成员函数间访问
普通成员可以访问静态成员;
静态成员函数只能通过对象间接引用非静态成员。
代码如下:
<数据类型> <类名>::<静态数据成员名>=<值>
引用格式:
<类名>::<静态成员名(成员数据/成员函数)>
2静态成员变量性质:
1只能被初始化一次,下次执行该语句时自动跳过。
2属于类,而非具体对象
3静态成员函数性质:
1不包含指向具体对象的this指针;
2不可以直接调用普通成员。
3类加载时分配内存空间属于类而非具体对象。
两者区别
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类加载时分配内存空间属于类而非具体对象。
相关文章推荐
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
- 静态成员函数和普通成员函数的区别?
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
- 静态成员函数与普通成员函数的区别
- 空类、含静态成员的类、普通类(不含虚函数、虚继承)的sizeof大小
- 静态成员函数和普通成员函数的区别
- 普通函数,成员函数,静态成员函数与【指针】
- C++普通函数,普通成员函数、静态成员函数的区别
- 静态成员函数和普通成员函数的区别
- 类中的三种函数(普通成员函数、静态成员函数、COSNT成员函数)总结
- 静态成员函数与普通成员函数的区别
- 静态成员函数和普通成员函数的区别
- 函数指针--成员函数(静态,非静态)&普通函数
- 普通成员函数调用静态成员数据
- 静态成员函数不能调用普通成员变量
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
- (转)C++静态成员函数
- 静态类成员函数
- 静态成员函数与pthread_create,纯虚函数匹配使用实例
- 静态变量与普通成员变量区别