C++基础知识之"static"

fengjingtu

静态成员变量

静态成员提供了一个同类对象的共享机制

把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static 成员

静态成员变量可以通过类和成员函数两种方式进行访问`

静态成员函数

静态成员函数提供不依赖于类数据结构的共同操作,它没有this指针

在类外调用静态成员函数用 “类名 :: ”作限定词,或通过对象调用。

静态成员函数中不能有普通成员变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<iostream>
using namespace std;
//static可以用来说明一个类的成员,表示所有对象的共享机制
//静态成员变量可以通过类和成员函数两种方式进行访问
//静态成员函数没有this指针,不依赖类,通过对象,类作用符,在类外面访问。
//静态成员函数中不能有普通成员变量
class Counter
{
public:
static int num2;//声明和定义公有静态数据成员
void setnum(int i,int i2)//成员函数访问数据成员
{
num = i;
num2 = i2;
}
void shownum()
{
cout << "num=" << num <<" num2="<<num2<<endl;
}
static void show()
{
cout << "num=" << num << " num2=" << num2 << endl;
//cout << a;//error,静态成员函数中不能有普通成员变量
}
private:
static int num;//声明和定义私有静态数据成员
int a;
};

int Counter:: num = 0;//声明并分配内存
int Counter:: num2 = 0;//声明并分配内存

void static_class_test()
{
Counter c;
Counter c2;
c.shownum();
c2.shownum();//c和c2的结果相同,访问的是同一个
c.setnum(1, 2);//通过对象,使用成员函数进行静态成员变量的访问。
c.shownum();
c2.shownum();//通过c1设置,通过c2访问。
cout << Counter::num2 << endl;//通过类访问公有的static成员
//cout << Counter::num << endl;//error不能访问私有的

Counter::show();
c.show();
c2.show();
}
int main_static_class_test()
{
static_class_test();
cout<<"hello world"<<endl;
system("pause");
return 0;
}