静态成员变量
在一个类中,若将一个成员变量声明为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数据成员时,最好在类内部初始化