c++静态函数和变量
来源:互联网 发布:淘宝 运营 系统架构 编辑:程序博客网 时间:2024/06/07 09:32
静态成员
静态成员:静态类中的成员加入static修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存的全局区。
非静态成员:所以没有加static的成员都是非静态成员,当类被实例化后,可以通过实例化的类名进行访问,非静态成员的生存期决定于该类的生存期,而静态成员则不存在生存期 的概念,因为静态成员始终驻留在全局区中。
静态成员变量
1、静态全局变量
- 该变量在全局数据区分配内存
- 初始化:如果不显式初始化,那么将被饮食初始化为0(自动变量是随机的,除非是显式初始化)
- 该变量只在本源文件可见,严格地讲,应该从定义之处开始到本文件结束。
- 文件作用域下声明的const的常量默认为static存储类型。
1、静态局部变量
- 该变量在全局数据区分配内存
- 初始化:如果不显式初始化,那么将被饮食初始化为0(自动变量是随机的,除非是显式初始化)
- 它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域。当定义它的函数或语句块结束时,其作用域也随之结束。
静态函数
静态函数的好处:静态函数不能被其他文件使用。在其他文件中可以定义相同名字的函数,不会发生冲突。
面向对象的static关键字
1、静态数据成员
对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。即静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新。
静态数据成员存储在全局数据区,静态数据成员定义时要分配空间,所以不能在类声明中定义。应该在类外定义。
同全局变量相比,使用静态数据成员有两个优势:
(1)静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性;
(2)可以实现信息隐藏。静态数据成员可以使private成员,而全局变量不能。
2、静态成员函数
与静态数据成员一样,我们也可以创建一个静态成员函数,它为类的全部服务,而不是为某一个类的具体对象服务。静态成员函数与静态数据成员一样,都是在类的内部实现,属于类定义的一部分。普通的成员函数一般都隐藏了一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的。通常情况下,this指针是缺省的、但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指针,从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数。
关于静态成员函数,可以总结以下几点:
(1)出现在类体外的函数不能指定关键字static;
(2)静态成员之间可以互相访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
(3)非静态成员函数可以任意地访问静态成员函数和静态数据成员;
(4)静态成员函数不能访问非静态成员函数和非静态数据成员;
(5)由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比,速度上会有少许的增长;
(6)调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指调用静态成员函数。
- C语言 静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- C语言静态变量和静态函数
- c语言静态变量和静态函数
- .c语言静态变量和静态函数
- C 语言静态变量和静态函数
- c语言静态变量和静态函数
- C语言静态变量和静态函数
- c语言静态变量和静态函数
- c语言静态变量和静态函数
- python爬虫实战二——股票数据定向爬虫【有补充】
- 笔记:SEO在网站制作中的应用
- 第十一课、C判断
- c python shell获得文件路径以及所有的文件
- 文章标题
- c++静态函数和变量
- 各数据类型大小
- pata1056
- 应用统计学与R语言实现学习笔记(十三)——因子分析
- 排序算法(不稳定)
- linux 内核启动 arm64 汇编 head.s
- 详解C中volatile关键字
- Java 字符串与Unicode之间的相互转换
- 如何在小米手机上使用monitor工具HierarchyViewer查看app的UI