静态成员就是成员变量和成员函数前面加上static,称为静态成员
1.static修饰成员变量
(1)所有对象共享static成员变量,一旦一个对象数据对其进行改动,所有对象调用其数据也会改变,一改全改。
(2)编译阶段分配内存,static成员变量内存分配在全局区
(3)只能在类内部定义,在类的外部进行初始化
(4)对象访问和类访问均可
(5)static成员变量可以设置访问权限
#include <iostream>
using namespace std;
#include <iostream>
class Person {
private:
string name;
static int sum;//私有静态成员
public:
static int money;
Person(string name);
};
int Person::sum = 50000;
int Person::money = 10000;//类外初始化
Person::Person(string name) {
this->name = name;
}
int main() {
Person person1("张三");
Person person2("李四");
person1.money = 20000;//通过对象访问
cout << "person2.money对象访问 " << person2.money << endl;
cout << "Person::money类名访问 " << Person::money << endl;//通过类名访问
//Person::sum 私有静态成员不可访问
return 0;
}
2.static修饰成员函数
(1)所有对象共享static成员函数
(2)static成员函数只能访问static成员变量
(3)对象和类访问均可
(4)static成员函数可以设置访问权限
#include <iostream>
using namespace std;
#include <iostream>
class Person {
private:
string name;
public:
static void sum();
static int money;
Person(string name);
};
int Person::money = 10000;//类外初始化
Person::Person(string name) {
this->name = name;
}
void Person::sum() {
money = 60000;//只能访问静态成员变量
//name = "l";不能访问非静态成员变量
}
int main() {
Person person1("张三");
Person person2("李四");
person1.sum();//对象访问
Person::sum();//类访问
cout << person2.money << endl;
return 0;
}