静态成员变量
在一个类中,若将一个成员变量声明为static,这种成员成为静态成员变量,与一般的数据成员不同,无论建立了多少个对象,都只想有一个静态数据的拷贝,静态成员变量,属于某个类,所有对象共享
静态变量,在编译阶段就分配空间,对象还没有创建时,就已经分配空间
静态成员变量必须在类内中声明,在类外定义静态数据成员不属于某个对象,在为对象分配空间中不包括静态成员所占空间静态数据成员可以通过类名或者对象名来引用
静态成员函数
可以访问静态的成员变量,不可以访问普通的成员变量
普通成员函数 都可以访问
静态成员函数也有权限
可以通过对象访问,也可以通过类名进行访问
#include<iostream>using namespace std;class Person{public:Person(){//m_Age = 10;}static int m_Age;//加入static 静态成员变量,会共享数据//静态成员变量,类内声明,类外初始化int m_A;//静态成员函数//1.不可以访问 普通的成员变量//2.可以访问静态成员变量//3.静态成员函数也是有权限的static void func(){//m_A = 10;m_Age = 100;cout << "func调用" << endl;}//普通成员函数,可以访问普通成员变量,也可以访问静态成员变量void myFunc(){m_A = 10;m_Age = 100;}private:static int m_other;//私有权限,类外不能访问static void func2(){cout << "func2调用" << endl;}};int Person::m_other = 0;int Person::m_Age = 0;//类外初始化void test01(){//1.通过对象访问属性Person p1;p1.m_Age = 10;Person p2;p2.m_Age = 20;cout << "p1=" << p1.m_Age << endl;cout << "p2=" << p2.m_Age << endl;//共享数据,都是20,以最近一次赋值为准//2.通过类名访问属性//因为通过类名访问,所以不能在类内初始化cout << "通过类名访问Age" << Person::m_Age << endl;//cout << "other=" << Person::m_other << endl;//私有权限在类外无法访问//静态成员函数调用//不可以访问 普通的成员变量p1.func();p2.func();Person::func();//Person::func2();//静态成员函数设为私有,类外不能访问}int main(){test01();system("pause");return 0;}
const静态成员属性
如果一个类的成员,既要实现共享,又要实现不可改变,就用static const 修饰
定义静态const数据成员时,最好在类内部初始化