静态成员函数与普通成员函数在C语言中的主要区别是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计917个文字,预计阅读时间需要4分钟。
静态成员函数与非静态成员函数的区别:- 数据成员:静态数据成员是类的一部分,为类的所有实例共享(静态区);非静态数据成员每个实例都有自己的副本(堆区)。
静态数据成员:- 是类的组成部分,为所有实例共享;- 存储在静态存储区;- 访问时使用类名或对象名。
非静态数据成员:- 每个实例都有自己的副本;- 存储在堆区;- 访问时使用对象名。
静态成员函数与非静态成员函数的区别
数据成员:
静态数据成员是类的一部分,为类的所有实例共享(静态区);非静态数据成员,类的每个实例都有一份拷贝(动态区)。
静态数据成员的访问:
静态数据成员是类的一部分,在产生任何实例之前已经存在,通过类名::静态成员变量名访问。
函数成员(都在代码区):
静态函数成员与非静态函数成员都为类所有,对象并不存在函数的拷贝。静态成员函数和非静态成员函数的根本区别在于非静态函数由对象名.或者对象指针->调用,调用时编译器会向函数传递this指针;静态成员函数则有类名::或者对象名.调用,编译器不向函数传递this指针,不识别对象个体,经常用来操作类的静态数据成员,要访问类的非静态成员可以通过对象来实现。
内存角度分析:
类的静态成员(数据成员和函数成员)为类本身所有,在类加载的时候就会分配内存,可以通过类名直接访问;非静态成员(数据成员和函数成员)属于类的实例所有,所以只有在创建类的实例的时候才会分配内存,并通过实例去访问。
注意:类的静态数据成员是静态存储,它是静态生存周期,必须进行初始化。
本文共计917个文字,预计阅读时间需要4分钟。
静态成员函数与非静态成员函数的区别:- 数据成员:静态数据成员是类的一部分,为类的所有实例共享(静态区);非静态数据成员每个实例都有自己的副本(堆区)。
静态数据成员:- 是类的组成部分,为所有实例共享;- 存储在静态存储区;- 访问时使用类名或对象名。
非静态数据成员:- 每个实例都有自己的副本;- 存储在堆区;- 访问时使用对象名。
静态成员函数与非静态成员函数的区别
数据成员:
静态数据成员是类的一部分,为类的所有实例共享(静态区);非静态数据成员,类的每个实例都有一份拷贝(动态区)。
静态数据成员的访问:
静态数据成员是类的一部分,在产生任何实例之前已经存在,通过类名::静态成员变量名访问。
函数成员(都在代码区):
静态函数成员与非静态函数成员都为类所有,对象并不存在函数的拷贝。静态成员函数和非静态成员函数的根本区别在于非静态函数由对象名.或者对象指针->调用,调用时编译器会向函数传递this指针;静态成员函数则有类名::或者对象名.调用,编译器不向函数传递this指针,不识别对象个体,经常用来操作类的静态数据成员,要访问类的非静态成员可以通过对象来实现。
内存角度分析:
类的静态成员(数据成员和函数成员)为类本身所有,在类加载的时候就会分配内存,可以通过类名直接访问;非静态成员(数据成员和函数成员)属于类的实例所有,所以只有在创建类的实例的时候才会分配内存,并通过实例去访问。
注意:类的静态数据成员是静态存储,它是静态生存周期,必须进行初始化。

