-
为什么要用到类的静态成员?
面向对象的程序设计方法兼顾数据的共享与保护,再其过程中数据达到了共享与 保护,然而数据之间的共享还应该包括对象与对象之间,才能保证数据的正确性与完整性,其作用是解决同一个类的不同对象之间的数据和函数共享问题 -
类的静态成员分类
类的静态成员分为了静态数据成员和静态函数成员。 -
静态数据成员
1.定义:采用static关键字来声明数据成员
2.用法:类名::标识符
3.例如:含有静态数据成员的Point类
#include<iostream>
using namespace std;
class Point //Point类的定义
{
public: //外部接口
Point(int x=0,int y=0):x(x),y(y){//构造函数及其初始化
//在构造函数中对cout累加,所有对象共同维护同一个count
count++;
}
Point(Point &p)//复制构造函数
{
x=p.x;
y=p.y;
count++;
}
~Point() { count--;}//析构函数
int getX()
{
return x;
}
int getY()
{
return y;
}
void showCount()
{
cout<<" Object count "<<count<<endl;//输出静态成员
}
private:
int x,y;
static int count;//静态数据成员声明,用于记录点的个数
};
int Point::count=0;//静态数据成员只能在类外进行初始化
int main() //主函数
{
Point a(4,5);`
cout<<"Point A: "<<a.getX()<<","<<a.getY();
a.showCount();//输出对象个数
Point b(a);//定义对象b,其构造函数会是count+1;
b.showCount();
return 0;
}
-
这个Point 类中count声明为静态数据成员,每定义一个新对象(也就是一个点)这个count就会加1,在使用构成中应当注意他的声明和初始化
静态函数成员
注意:静态成员函数可以直接访问该类的静态数据和函数成员,然而访问非静态成员必须通过对象名 。 -
静态函数成员的用法
#include<iostream>
using namespace std;
class Point //Point类的定义
{
public: //外部接口
Point(int x=0,int y=0):x(x),y(y){//构造函数及其初始化
//在构造函数中对cout累加,所有对象共同维护同一个count
count++;
}
Point(Point &p)//复制构造函数
{
x=p.x;
y=p.y;
count++;
}
~Point() { count--;}//析构函数
int getX()
{
return x;
}
int getY()
{
return y;
}
void showCount()
{
cout<<" Object count "<<count<<endl;//输出静态成员
}
private:
int x,y;
static int count;//静态数据成员声明,用于记录点的个数
};
int Point::count=0;//静态数据成员只能在类外进行初始化
int main() //主函数
{
Point a(4,5);
cout<<"Point A: "<<a.getX()<<","<<a.getY();
a.showCount();//输出对象个数
Point b(a);//定义对象b,其构造函数会是count+1;
b.showCount();
return 0;
}
注意:静态函数成员与静态数据成员不同处在于调用时通过什么来访问,这一点必须记清楚不能搞混淆。