5.C++静态成员

在C++类中声明成员时,加上static关键字声明的成员叫静态成员。包括静态成员变量和静态成员函数(方法)。

一.静态成员变量:

cpp 复制代码
class Person
{
    public:
        int a;        //普通成员变量
        static int b; //静态成员变量
};

静态成员变量特点:

1.在编译阶段分配内存。

2.类内声明,类外初始化。

3.所有对象共享同一份数据。

4.静态成员变量也是有访问权限,私有的成员变量无法再类外访问!

1.类内声明,类外初始化:
cpp 复制代码
class Person
{
    public:
        int a = 10;        //普通成员变量在类内初始化

        static int b; //静态成员变量只能在类内定义,到类外初始化
};

int Person :: b = 20; //类外初始化时不用再写static
2.所有对象共享同一份数据:
cpp 复制代码
class Person
{
    public:
        int a = 10;        //普通成员变量在类内初始化

        static int b; //静态成员变量只能在类内定义,到类外初始化
};

int Person :: b = 20; //类外初始化时不用再写static


void test()
{
	Person p1;
	Person p2;
    对象p1和p2都共享静态成员变量b
	cout << "p1.b = " << p1.b << endl;
	cout << "p1.b = " << p2.b << endl;

    //p2修改b的值,p1在使用时的结果是p2修改后的值
	p2.b = 30;
	cout << "修改后p1.b = " << p1.b << endl;
	cout << "修改后p2.b = " << p2.b << endl;
}

输出结果:

cpp 复制代码
p1.b = 20
p1.b = 20        
修改后p1.b = 30
修改后p2.b = 30
3.静态成员变量的两种访问方式:

1.通过对象访问。

2.通过类名访问。

cpp 复制代码
class Person
{
    public:
        int a = 10; 
        static int b;
};
int Person :: b = 20; 


void test()
{
	Person p1;
	cout << "p1.b = " << p1.b << endl;  //1.通过对象访问。
	cout << "Person::b = " << Person::b << endl;  //2.通过类名访问。
}

输出结果:

cpp 复制代码
p1.b = 20
Person::b = 20  

二.静态成员函数:

cpp 复制代码
class Person
{
    public:
        static void func()
        {
            cout << "func()的调用" << endl;
        }
};

静态成员函数特点:

1.所有对象共享同一个函数。

2.静态成员函数只能访问静态成员变量。

3.静态成员函数也是有访问权限,私有的成员函数无法再类外访问!

1.所有对象共享同一个函数:
cpp 复制代码
class Person
{
    public:

        //静态成员函数
        static void func()
        {
            cout << "func()的调用" << endl;
        }
};


void test()
{
	Person p1;
	Person p2;
    //1.对象p1和p2都共享静态成员函数func()
	p1.func();
    p2.func();
}

输出结果:

cpp 复制代码
func()的调用
func()的调用
2.静态成员函数只能访问静态成员变量:
cpp 复制代码
class Person
{
    public:
        //静态成员变量
        static int b;

        //静态成员函数
        static void func()
        {
            cout << "func()调用静态成员变量b的值为:" << endl;
            cout << b << endl;
        }
};

int Person::b = 10;

void test()
{
	Person p1;
	p1.func();
}

输出结果:

cpp 复制代码
func()调用静态成员变量b的值为:
10
3.静态成员的两种访问方式:

1.通过对象访问。

2.通过类名访问。

cpp 复制代码
p1.func();1.通过对象访问。
Person::func();//2.通过类名访问。
相关推荐
007php0071 小时前
PHP与Java项目在服务器上的对接准备与过程
java·服务器·开发语言·分布式·面试·职场和发展·php
Evand J2 小时前
【MATLAB程序,一维非线性EKF与RTS】MATLAB,用于一维的位移与速度滤波和RTS平滑/高精度定位,带滤波前后的误差对比
开发语言·matlab·卡尔曼滤波·rts平滑·正向滤波
火云洞红孩儿7 小时前
告别界面孤岛:PyMe如何用一站式流程重塑Python GUI开发?
开发语言·python
叫我辉哥e17 小时前
新手进阶Python:办公看板集成ERP跨系统同步+自动备份+AI异常复盘
开发语言·人工智能·python
小丑西瓜6667 小时前
CMake基础用法,cmake_minimum_required,project,add_executable
linux·服务器·c++·camke
晚风吹长发7 小时前
初步了解Linux中的命名管道及简单应用和简单日志
linux·运维·服务器·开发语言·数据结构·c++·算法
fpcc8 小时前
设计心得——隔离隐藏的初步实践
c++
C++ 老炮儿的技术栈8 小时前
不调用C++/C的字符串库函数,编写函数strcpy
c语言·开发语言·c++·windows·git·postman·visual studio
布局呆星8 小时前
闭包与装饰器
开发语言·python
fyzy8 小时前
C++写后端实现,实现前后端分离
开发语言·c++