1⃣️静态局部变量 作用域不变,生命周期延长至程序运行结束
2⃣️静态全局变量 作用域变小,不能extern引用,生命周期不变
类中的静态成员:成员函数,成员变量都是使用对象来进行调用,
也有些数据成员和成员函数属于整个类,称这些成员为类的静态成员(这些成员不属于对象,创建对象时不会为静态成员开辟空间)
静态成员整个类只有一份空间(静态空间)
Emploee::pay(50);//静态成员函数的调用=>类名::静态成员函数名称
1⃣️类的静态成员变量初始化在类外 类型名 类名:: 变量初始化 (int Student:: allStudent=0;)
2⃣️静态成员(函数、变量)属于类,非静态成员则属于某一个对象
3⃣️静态成员函数的调用 Emploee::pay(50);//静态成员函数的调用=>类名::静态成员函数名称
类占用空间大小计算方式:成员变量的累加(自动补齐),静态成员变量不计算在内
静态成员函数不能访问非静态成员变量与非静态成员函数,而普通成员函数技能访问静态成员变量,又能访问到静态成员函数
友元函数:函数中可以直接访问其私有成员(friend point middle(point &p1,point &p2);)//不是成员函数,是普通函数
友元类:若l类A是类B的友元类,则A的成员函数均为类B的友元函数(1⃣️单向2⃣️不传递)
#include <iostream>
#include <string>
using namespace std;
class Emploee{//员工类
// 普通成员变量
char *name;
int ids;
// 类的静态成员变量
static int allNum;// 员工总人数
static int totalPays;//员工总支出
public:
Emploee(char *_name){//构造函数
name=new char[strlen(_name)+1];
strcpy(name, _name);
allNum++;
ids=allNum;//非静态成员函数调用静态成员变量
}
~Emploee(){//析构函数
if (name!=NULL) {
delete []name;
name=NULL;
}
}
void display(){
cout<<"name:"<<name<<endl;
cout<<"id:"<<ids<<endl;
cout<<"++++++++++++++\n";
}
// 类的静态成员函数
static void pay(int onepay){
totalPays+=onepay;//静态成员函数访问静态成员变量
cout<<"all pay:"<<totalPays<<endl;
}
static void allPerson(){
cout<<"all person:"<<allNum<<endl;
}
};
// 类的静态成员变量初始化在类外
int Emploee:: allNum=0;
int Emploee:: totalPays=0;
int main(int argc, const char * argv[]) {
Emploee e1((char*)"zhanghow");
Emploee e2((char*)"lisi");
Emploee e3((char*)"wangwu");
Emploee e4((char*)"zhaosi");
e1.display();
e2.display();
e3.display();
Emploee::pay(50);//静态成员函数的调用=>类名::静态成员函数名称
Emploee::pay(150);
Emploee::allPerson();
return 0;
}