300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 静态数据成员和静态成员函数(static)

静态数据成员和静态成员函数(static)

时间:2022-01-29 00:22:20

相关推荐

静态数据成员和静态成员函数(static)

目录

一.关于静态成员

二.静态数据成员和普通数据成员的共同点

三.为什么要使用静态数据成员

四.关于静态数据成员的初始化

五. 静态成员的访问方式

六.静态成员函数

1.与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能够处理静态数据成员

2.静态成员函数只能访问static成员,包括数据成员和成员函数

3.非static成员函数既可以访问static数据成员,也可以访问非static数据成员。static成员函数只能访问satic成员

4.静态成员函数不与任何对象绑定在一起,不包含this指针

一.关于静态成员

1.静态成员的声明要加个关键static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>,非静态成员则不能。

2. static成员变量属于类(被存放在数据段中),不属于某个具体的对象(具体对象的内存是分配在堆中的),即使创建多个对象,也只为该变量分配一次内存,所有对象使用的都是这份内存中的数据。

3.若它为public类型,当某个对象修改了它,也会影响到其他对象,所有对象都是“同甘共苦的”

二.静态数据成员和普通数据成员的共同点

静态数据成员和普通数据成员一样遵从public,protected,private访问规则;

三.为什么要使用静态数据成员

1.每个对象都有自己都有的数据成员

2.不同对象如何共享数据?

全局变量:谁都可以访问,不安全

静态数据成员:可以实现数据共享,该类的所有对象都共享这块静态存储空间它不属于某一个对象,它与整个程序的生命周期相同,即使某个对象消亡了,静态数据成员还存在,没有改变

四.关于静态数据成员的初始化

在类内定义,类外声明

声明的格式 <数据类型><类名>::静态数据成员 = <值>

静态数据成员不能直接初始化

例如,错误的

static int i=5;

//正确代码举例#include<iostream>using namespace std;class A{public:static int i;};int A::i=5;//::表示i是属于A这个类的 int main(){A a;cout<<A::i<<endl;//通过类名加域作用符直接访问 cout<<a.i<<endl;//通过对象访问 return 0; }

#include <iostream>using namespace std;class A{public: static int i;};int A::i=9; int main(){A a,b;cout<<a.i<<endl;cout<<b.i<<endl;cout<<"----------"<<endl;b.i=8;cout<<a.i<<endl;//通过这两行的输出表明a,b两个对象共享内存空间 cout<<b.i<<endl;return 0;}

五. 静态成员的访问方式

1.通过作用域运算符::直接访问静态成员 类名::静态成员

2.通过对象.静态成员

3.通过指针->静态成员

//访问静态数据成员#include<iostream>using namespace std;class A{public:static int i;};int A::i=5;//::表示i是属于A这个类的 int main(){A a;cout<<A::i<<endl;//通过类名加域作用符直接访问 cout<<a.i<<endl;//通过对象访问 A * a1=&a;cout<<a1->i; //通过对象指针访问数据成员 return 0; }

//访问静态成员函数 #include <iostream>using namespace std;class Box{public:static int c;int a,b;Box(int x,int y){a=x;b=y;}static void fun(){cout<<c<<endl;cout<<"static fun----"<<endl;}};int Box::c=8;int main(){Box box(2,3);Box::fun();//使用作用域运算符直接访问静态成员 box.fun();//通过对象.引用名 Box * box2=&box; box2->fun(); //通过类Box对象的指针 return 0;}

六.静态成员函数

1.与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能够处理静态数据成员

#include<iostream>using namespace std;class Box{public:static void fun(){cout<<"static---"<<endl;}};int main(){Box box1;box1.fun();Box::fun();return 0; }

2.静态成员函数只能访问static成员,包括数据成员和成员函数

#include <iostream>using namespace std;class Box{public:static int c;int a,b;Box(int x,int y){a=x;b=y;}static void fun(){cout<<c<<endl;cout<<"static fun----"<<endl;}};int Box::c=8;int main(){Box box(2,3);box.fun();Box::fun();return 0;}

错误举例:

class Box{public:static int c;int a,b;Box(int x,int y){a=x;b=y;}static void fun(){cout<<a<<endl;cout<<"static fun----"<<endl;}};

3.非static成员函数既可以访问static数据成员,也可以访问非static数据成员。static成员函数只能访问satic成员

#include <iostream>using namespace std;class Box{public:static int c;int a,b;Box(int x,int y){a=x;b=y;}void fun(){cout<<a<<" "<<c<<endl;cout<<"static fun----"<<endl;}};int Box::c=8;int main(){Box box(2,3); box.fun();//通过对象.引用名 return 0;}

4.静态成员函数不与任何对象绑定在一起,不包含this指针

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。