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.通过类名访问。
相关推荐
coding随想1 小时前
JavaScript中的BOM:Window对象全解析
开发语言·javascript·ecmascript
念九_ysl1 小时前
Java 使用 OpenHTMLToPDF + Batik 将含 SVG 遮罩的 HTML 转为 PDF 的完整实践
java·开发语言·pdf
yaoxin5211231 小时前
124. Java 泛型 - 有界类型参数
java·开发语言
liulilittle2 小时前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
88号技师2 小时前
2025年6月一区-田忌赛马优化算法Tianji’s horse racing optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
勤奋的知更鸟2 小时前
Java 编程之模板方法模式
java·开发语言·模板方法模式
十年编程老舅3 小时前
跨越十年的C++演进:C++20新特性全解析
c++·c++11·c++20·c++14·c++23·c++17·c++新特性
上单带刀不带妹3 小时前
手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
开发语言·前端·javascript·vue.js·前端框架
-凌凌漆-4 小时前
【Qt】QStringLiteral 介绍
开发语言·qt