更多精彩内容可阅读: C/C++ 关键字专栏
static关键字
📌static作用“改变生命周期” 或者 “改变作用域
static关键字特性
- 变量默认初始化为0
- 保持变量内容的持久
- 全局隐藏
static关键字使用场景
当用static声明函数内的局部变量时
表示这个局部变量是在静态存储区分配的空间,在函数调用结束后其占用的存储单元并不释放,仍然保留原值。
此外,静态局部变量是在编译时赋一次初值,程序运行时每次调用函数都不再重新赋初值,而是使用前次函数调用结束时的值。
若程序不赋初值,则编译时自动赋值0(普通局部变量不赋初值的话,其值不确定)。
当用static声明在函数体外的全局变量时
表示这个全局变量只能用于本文件,而不能被别的文件引用(即使使用了extern来扩展使用域),这样就能在不同文件中使用相同的全局变量名,提高了程序的通用性和可移植性。
📌ps:全局变量和静态全局变量都存放在静态存储区中,都是在编译时分配内存,只是作用域不同(全局变量可以在其他文件中用extern扩展使用域)。
当用static声明函数时
表示此函数只能被本文件中的其他函数调用(称为内部函数),这样在不同文件中就可以使用相同函数名,只要用static声明即可。
当用static声明类的成员变量时
- static 成员变量的特点
- 这个类的所有对象共享一个静态成员,所以先于类的对象而存在的.
- 如果静态成员是公有的,那么可以直接通过类名调用.
- 静态成员数据在声明时候必须在类外初始化, 因为静态成员变量是先于类的对象而存在的.
- static 成员变量的优点
用static修饰的成员变量在对象中是不占内存的,因为他不是跟对象一起在堆或者栈中生成,
用static修饰的变量在静态存储区生成的,所以用static修饰一方面的好处是可以节省对象的内存空间。 - static 成员变量的示例
//通过静态成员函数来获得学生的总人数和总成绩 #include <iostream> using namespace std; class Student{ public: Student(char *name, int age, float score); void show(); public: //声明静态成员函数 static int getTotal(); static float getPoints(); private: static int m_total; //总人数 static float m_points; //总成绩 private: char *m_name; int m_age; float m_score; }; int Student::m_total = 0; float Student::m_points = 0.0; Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ m_total++; m_points += score; } void Student::show(){ cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl; } //定义静态成员函数 int Student::getTotal(){ return m_total; } float Student::getPoints(){ return m_points; } int main(){ (new Student("小明", 15, 90.6)) -> show(); (new Student("李磊", 16, 80.5)) -> show(); (new Student("张华", 16, 99.0)) -> show(); (new Student("王康", 14, 60.8)) -> show(); int total = Student::getTotal(); float points = Student::getPoints(); cout<<"当前共有"<<total<<"名学生,总成绩是"<<points<<",平均分是"<<points/total<<endl; return 0; }
📌PS:C++中不存在静态类
结语
在我们的编程学习之旅中,理解是我们迈向更高层次的重要一步。然而,掌握新技能、新理念,始终需要时间和坚持。从心理学的角度看,学习往往伴随着不断的试错和调整,这就像是我们的大脑在逐渐优化其解决问题的“算法”。
这就是为什么当我们遇到错误,我们应该将其视为学习和进步的机会,而不仅仅是困扰。通过理解和解决这些问题,我们不仅可以修复当前的代码,更可以提升我们的编程能力,防止在未来的项目中犯相同的错误。
我鼓励大家积极参与进来,不断提升自己的编程技术。无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力。