静态成员:
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
静态成员分为: 静态成员变量和静态成员函数,其中这两个特点如下
静态成员变量:
特点1、所有对象共享同一份数据
特点2、在编译阶段分配内存
特点3、类内声明,类外初始化
静态成员函数:
特点1、所有对象共享同一个函数
特点2、静态成员函数只能访问静态成员变量
静态成员变量:
示例代码:
#include<iostream> #include<string> using namespace std; class Person { public: Person() { cout << this->b << endl; } public: static int a; //定义一个共享静态成员变量 private: static int b; //定义一个私有静态成员变量 }; int Person::a = 1; int Person::b = 2; void test01() { Person p1; cout << p1.a << endl; // 生成p1的对象 直接访问不可以,因为没有在外部对静态成员进行初始化 //cout << p1.b << endl; //无法进行访问,因为静态变量b是私有的 //由于静态成员变量是存在于全局区的,所以我们可以直接通过类名进行访问 cout << Person::a << endl; //cout << Person::b << endl; } int main() { test01(); system("pause"); return 0; }
静态成员函数:
静态成员函数特点:
特点1、程序共享一个函数
特点2、静态成员函数只能访问静态成员变量
示例代码
#include<iostream> #include<string> using namespace std; class Person { public: Person(int a) { this->a = 10; } static void to_visit() { // 静态函数可以访问静态变量,但是无法访问类中的变量,原因也很好理解,无法区别到底是哪个对象的a成员变量 cout << "这是公共静态成员函数" << endl; cout << a << endl; } public: static int a; private: static void to_visit_s() { //同样的也有私有静态成员函数 cout << "这是私有静态成员函数" << endl; } }; int Person::a = 1; int main() { Person p1(10); cout << p1.a << endl; Person::to_visit();//同样也可以通过类名进行访问静态成员函数 p1.to_visit(); //通过对象访问静态成员函数 //Person::to_visit_s(); system("pause"); return 0; }