目录
1、定义-静态数据成员
- 类的所有对象共同拥有的一个数据成员
- 使用储存类型关键字"static"在类体内声明
- 在类体外定义或者初始化
由于静态数据成员不属于任何对象,那么对象创建时就不会为他分配存储空间。
为此,静态数据成员在类体内声明后,必须在类体外定义或者初始化,才能完成在全局数据去的存储分配。
2、定义-静态函数成员
- 如果需要在对象创建之前操作静态数据成员,只能使用静态函数成员
- 静态函数成员和静态数据成员一样,属于类而不是某一个对象
- 静态成员函数只能访问类中的静态成员
3、静态数据成员、静态函数成员-实例(借书卡类)
#include <iostream>
using namespace std;
class Bookcard {
private:
int id;
static int sum; //静态数据成员,表示图书总数,属于整个类
public:
Bookcard(int n=0):id(n){}
static void set(int n) { //静态函数成员:设置初始图书量,在定义对象之前,对sum进行初始化
sum = n;
}
static int getSum() { //静态函数成员,返回sum的值
return sum;
}
void takeBook(int n) { //借书函数
sum -= n;
}
void backBook(int n) { //还书函数
sum += n;
}
~Bookcard(){}
};
int Bookcard::sum; //类外对sum定义,但没有初始化,留到主函数设初值
int main()
{
int bnew;
cout << "请设置初始图书数量" << endl;
cin >> bnew;
Bookcard::set(bnew);
cout << "book is:" << Bookcard::getSum() << endl; //在没有定义对象之前,用类名::函数名
Bookcard c1(2020211402); 的方式调用静态成员函数
c1.takeBook(10); //定义对象后,用对象名.函数名的方式调用
c1.backBook(5);
cout << "book is:" << c1.getSum();
}
4、总结
静态函数成员的2种外部访问形式:
1.对象创建前:类名::静态成员函数名(参数表)
2.对象成员创建后:对象名.静态成员函数名(参数表)或类名::静态成员函数名(参数表)(此时,二者共存)
其他说明:
- 出现在类体外的函数不能指定关键字static
- 静态成员之间可以相互访问
- 非静态成员函数可以任意访问静态成员函数和静态数据成员
- 静态数据成员不能访问非静态成员函数和非静态数据成员