好久不见,最近忙着各种事,博客发的少。最近快要期末考试了,C++ 的一些语法细节我们继续在博客中讨论。今天要讲的是C++ 中的类变量与类方法 ,也就是所谓的类中的静态变量以及静态函数。
**
C++类中的静态变量以及静态函数的用法
**
说实话,语法基础好的同学一听“静态”二字就有感觉了。我们知道,内存分为四区 ,分别是 栈区 堆区 数据段 代码段 。但凡是静态的变量,不管是全局静态变量还是局部静态变量还是我们门今天要讲的类变量(类中的静态变量)都是存放在内存的数据段的。类变量很好理解,即属于该类(所有对象共享)的变量 。下面我们来看几个例子,注意为了读者便于理解,代码不使用面向对象的封装原理。所以用struct而不是class.
#include<iostream>
using namespace std;
struct Temp{
public:
int a;
int b;
static int x;
};
int Temp::x=0;//注意,这句话是给类变量的初始化,必须要写
int main()
{
Temp temp1,temp2;
temp1.x=333;
temp2.x=444;
cout<<temp1.x<<endl;
cout<<temp2.x<<endl;
return 0;
}
结果打印出来是什么呢?哈哈哈 ,是
444
444
现在 读者明白 什么是类中的静态变量了吧。就是 该类所有的,该类的所有对象所公用一个的,就是类中的静态变量。而成员变量是没对对象 都有一堆自己的成员变量。
实际上 上述代码我们可以改成这样,读者就更加明白什么是“类的”什么是“对象的”
#include<iostream>
using namespace std;
struct Temp{
public:
int a;
int b;
static int x;
};
int Temp::x=0;//注意,这句话是给类变量的初始化,必须要写
int main()
{
Temp temp1,temp2;
temp1.x=333;
temp2.x=444;
cout<<Temp::x<<endl;
return 0;
}
更夸张的是,你还可以这样:
#include<iostream>
using namespace std;
struct Temp{
public:
int a;
int b;
static int x;
};
int Temp::x=0;//注意,这句话是给类变量的初始化,必须要写
int main()
{
Temp::x=13;
cout<<Temp::x<<endl;
return 0;
}
13
哈哈,是的,就算类没有实例化对象,类变量依旧存在。
关于类中的静态成员函数,我们暂时只知道,类中的静态成员函数只能操作类中的静态变量即可。