欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

C++类与static关键字

发布时间:2025/4/5 c/c++ 57 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C++类与static关键字 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

五句话概括:静态成员变量和静态成员函数都属于类的,不属于具体某个对象。

                     静态成员变量定义时,可以在类外定义,不受访问权限限制,但是在访问时,却要遵循访问权限限制。

                     静态成员函数只能访问静态成员变量。普通函数既可以访问静态成员变量,也可以访问普通成员变量。

                     静态成员变量存在的意义是实现数据的共享。

                     在静态成员函数内部可以声明静态变量,注意不是静态成员变量。如果在静态成员函数内部声明一个静态变量,则该类的所有对象将共享这个变量。

静态成员变量

静态成员变量属于类而不属于任何一个对象,如此一来可以实现数据共享功能。静态成员变量不会影响类及其对象的大小,也即sizeof结果不会受到影响。

静态成员变量如果被设置为private或protected属性,则在类外同样无法访问,但定义该变量的时候却不受此限制,如例2所示,虽然静态成员变量count为private属性,但是它在类外定义的时候不受private限制。

class student { public:student(){count ++;}~student(){count --;} private:static int count;//其它成员变量 }; int student::count = 0;//静态成员变量可以在外部用类名加上域解析符“::”加上变量名的形式定义

静态成员函数

静态成员函数只能访问静态成员变量,而不能访问非静态成员变量。普通成员函数(包括构造函数和析构函数)既可以访问普通成员变量,同时又可以访问静态成员变量。

#include<iostream> using namespace std;class test { public:test(int a, int b){num = a; plus = b;}static int getnum(){return num;}static int add(){return num+plus;} //compile errorvoid setnum(int a){num = a;}void setplus(int a){plus = a;} private:static int num;int plus; }; int test::num = 1;int main() {test one;one.setnum(5);cout<<test::getnum()<<endl;return 0; }

访问静态成员变量和静态成员函数均有两种方式,其一是和普通的成员变量成员函数相同,通过对象来访问,其二则是可以通过类名加上域解析操作符访问。当然访问过程中仍然要遵循private、protected和public关键字的访问权限限定。访问静态成员变量和静态成员函数首选的方法是通过类来访问,毕竟静态成员变量和静态成员函数都是属于类的,与类相关联,而不是属于类的对象。普通成员变量或成员函数不可以通过类来访问。由于静态成员变量和静态成员函数都是属于类,而不是属于对象,因此静态成员函数内部也不存在this指针,因为静态成员函数不属于对象。

在静态成员函数内部可以声明静态变量,注意不是静态成员变量。如果在静态成员函数内部声明一个静态变量,则该类的所有对象将共享这个变量。
 

#include<iostream> using namespace std;class test { public:static void add(int a); };void test::add(int a) {static int num = 0;int count = 0;num += a;count += a;cout<<num<<" "<<count<<endl; }int main() {test one,two,three;one.add(5);two.add(4);three.add(11);return 0; }

程序运行结果:
5 5
9 4
20 11

 

总结

以上是生活随笔为你收集整理的C++类与static关键字的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。