静态成员
使用静态成员的目的是为了实现数据之间的共享,使用全局变量可以实现数据共享,但是全局变量具有其局限性,因此主要通过使用类的静态成员进行数据的共享。
静态数据成员
在类中的静态成员可以实现多个该类的对象之间的数据共享,在实现共享的同时还保证了数据的安全性,不会被外部成员访问.因此,一个类的静态成员是所有该类的对象的成员,而不是具体某一对象独有的成员。
使用静态成员函数的另一个好处是节约内存空间,对于同一个类的多个对象来说,静态数据成员是所有类的对象所共有的,储存在固定的内存空间中,供所有类的对象共同使用
类的静态数据成员是属于类的而非某一个对象的,所以在使用静态成员时调用语句应该是“类名称+域区分符+成员名称”
静态成员的使用方法和注意事项:
-
静态数据成员在定义或说明是前面加关键字static
-
静态成员初始化与一般数据成员初始化不同,静态成员的初始化方式为:
int classname:: var1 = 1;
在这里只是举出一个例子,前面的是数据类型,然后是相应的类名,在作用域运算符之后命名并对变量进行赋值
同时要注意:
1、初始化在类外部进行,前面不加static,以免与一般静态变量或者对象相混淆
2、初始化时不加该对象的访问权限控制符private或public等
3、初始化时使用作用域运算符来标明它所属的类,因此,静态数据成员是类的成员而非对象的成员
-
静态数据成员是静态存储的,具有静态生存期,必须对它进行初始化
-
引用静态数据成员时,采取以下格式:
classname::varname
下面使用一个实例来演示静态数据成员的使用方法:
#include<iostream>
#include<string>
using namespace std;
class Myclass
{
public:
Myclass(int a, int b, int c);
void getSum();
private:
int A, B, C;
static int sum;
};
int Myclass::sum = 0;
Myclass::Myclass(int a, int b, int c)
{
A = a;
B = b;
C = c;
sum += A + B + C;
}
void Myclass::getSum()
{
cout << sum << endl;
}
void main()
{
Myclass M(3, 7, 10), N(14, 9, 11);
M.getSum();
N.getSum();
}
代码运行结果:
54
54
这也从侧面说明了sum是所有成员公有的,拥有静态生命周期
静态成员函数
静态成员数据与静态成员函数相同,他们都属于一个类的静态成员而非某一对象的静态成员,在使用静态成员函数时不需要对象名
调用静态成员函数的语法是(以下为事例格式)
classname :: func (int a)