静态数据成员
静态成员可实现多个对象间的数据共享,不会破坏隐藏的原则
静态成员是类的所有对象共享的成员,而不是某个对象的成员
静态数据成员可以节省内存
静态数据成员在定义或说明时前面加关键字static
初始化的格式
<数据类型><类名>::<静态数据成员名>=<值>
注意事项
1.初始化在类体外进行,而前面不加static
2.初始化时不加该成员的访问权限控制符private,public等
3.初始化时使用作用域运算符来标明它所属类
4.静态数据成员是类的成员,而不是对象的成员
5.静态数据成员是静态存储,静态生存期,必须初始化
引用静态数据成员时,采用如下格式
<类名>::<静态成员名>
示例:
#include <iostream>
using namespace std;
class CStatic
{
public:
CStatic(int a, int b, int c);
void GetNumber();
void GetSum();
private:
int A, B, C;
static int Sum;
};
int CStatic::Sum = 0; //静态数据成员类外且必须初始化
CStatic::CStatic(int a, int b, int c)
{
A = a;
B = b;
C = c;
Sum += A + B + C;
}
void CStatic::GetNumber()
{
cout << "Number=" << A << "," << B << "," << C << endl;
}
void CStatic::GetSum()
{
cout << "Sum=" << Sum << endl;
}
void main()
{
CStatic M(3, 7, 10), N(14, 9, 11);
M.GetNumber();
N.GetNumber();
/*M和N的GetSum()成员函数都会打印54
说明静态成员变量对2个对象都有效
也说明静态成员属于类,而不是某个特定的对象*/
M.GetSum(); //54
N.GetSum(); //54
system("pause");
}
静态成员函数
和静态数据成员一样都属于类的静态成员,都不是对象成员
引用不需要用对象名
函数的实现中不能直接引用类中说明的非静态成员
可以引用类中说明的静态成员
若静态成员函数中要引用非静态成员时,可通过对象来引用
静态成员函数使用如下格式
<类名>::<静态成员函数名>(<参数表>);
示例
#include <iostream>
using namespace std;
class M
{
public:
M(int a)
{
A = a;
B += a;
}
static void f1(M m);
private:
int A;
static int B;
};
void M::f1(M m)
{
cout << "A=" << m.A << endl;
cout << "B=" << B << endl;
}
int M::B = 0;
void main()
{
M P(5), Q(10);
M::f1(P); //调用时不用对象名
M::f1(Q);
system("pause");
}
网友评论