1、 所有对象共享同一份数据
2、 在编译阶段分配内存
3、 类内声明,类外初始化(重要)
4、静态成员变量也有访问权限,写在private 里,类外是访问不到的
#include<iostream> #include <string> using namespace std; class Phone { public: Phone()//默认构造 { } Phone(string name):phone_name(name)//初始化列表 { } string phone_name; }; class Person { public: Person() { } Person(int a, int b, int c,string d) : m_a(a), m_b(b), m_c(c), m_phone(d) //初始化列表 { } public: int m_a, m_b, m_c,m_d; Phone m_phone;//类内的成员变量可以为另一个类对象 static int A;//静态成员变量声明 }; int Person::A = 0; //静态成员变量初始化(类外初始化,类内声明) void main() { //两种访问静态成员变量的方式 Person p;//1、通过创建一个类对象访问静态成员变量 cout << "A=" << p.A<< endl; cout << "A=" << Person::A<< endl;//2、通过类名来访问,因为它本身也不属于某一个对象,所以对象是共享同一个静态数据的 }
1、 所有对象共享同一个函数
2、静态成员函数只能访问静态成员变量
3、静态成员函数也有访问权限,写在private 里,类外是访问不到的
class Person { public: //静态成员函数特点: //1 程序共享一个函数 //2 静态成员函数只能访问静态成员变量 static void func() { cout << "func调用" << endl; m_A = 100; //m_B = 100; //错误,不可以访问非静态成员变量,因为无法区分是哪一个对象的成员 } static int m_A; //静态成员变量 int m_B; // 非静态成员变量 private: //静态成员函数也是有访问权限的 static void func2() { cout << "func2调用" << endl; } }; int Person::m_A = 10; void test01() { //静态成员变量两种访问方式 //1、通过对象 Person p1; p1.func(); //2、通过类名 Person::func(); //Person::func2(); //私有权限访问不到 } int main() { test01(); return 0; }