c++类和对象一静态成员的讲解

简介: c++类和对象一静态成员的讲解

在C++中,静态成员是类的一个特殊成员,它不属于类的任何一个对象实例,而是属于类本身。静态成员可以是静态数据成员(静态变量)和静态成员函数。静态成员在程序的生命周期中只有一个实例,不论创建了多少个类的对象,静态成员都只有一个副本。

 

静态数据成员

静态数据成员是类的所有对象共享的数据成员。无论创建多少个类的对象,静态数据成员都只有一个内存地址。这意味着,如果你更改了静态数据成员的值,那么它将影响到类的所有对象。

 

特点:

静态数据成员在类的所有对象之间是共享的。

静态数据成员必须在类的外部进行初始化。

静态数据成员可以通过类名和作用域解析运算符来访问。

示例


image.png

image.png

在上面的代码中,Counter 类有一个静态数据成员 count 和两个静态成员函数 increment 和 getCount。静态数据成员 count 被初始化为0,并在类的外部进行。通过调用静态成员函数 increment,我们可以增加 count 的值。无论通过类名还是对象名来调用静态成员函数,都会访问和修改同一个静态数据成员 count。因此,Counter::getCount() 返回的是经过所有调用 increment() 之后累加的计数。

 

静态成员函数

静态成员函数与静态数据成员类似,它属于类而不是类的任何对象。静态成员函数不能访问类的非静态成员(包括非静态数据成员和非静态成员函数),因为非静态成员需要依赖于具体的对象实例。

 

特点:

静态成员函数可以通过类名和作用域解析运算符来调用。

静态成员函数不能访问类的非静态成员。

静态成员函数主要用于操作静态数据成员。

示例:

image.png

在上面的代码中,MyClass 类有一个静态数据成员 staticVar 和一个非静态数据成员 nonStaticVar。还有一个静态成员函数 showStaticVar 和一个非静态成员函数 showNonStaticVar。静态成员函数 showStaticVar 只能访问静态数据成员 staticVar,而不能访问非静态数据成员 nonStaticVar。

 

总结

静态成员是C++类的一个重要特性,它们允许我们在类的所有对象之间共享数据。静态数据成员只有一个副本,无论创建多少个类的对象实例。静态成员函数主要用于操作静态数据成员,并且不能访问非静态成员。理解静态成员的工作原理有助于更好地设计和使用类,特别是在需要跨多个对象共享信息时。

目录
相关文章
|
7天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
33 4
|
8天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
28 4
|
1月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4
|
1月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
23 4
|
1月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
21 1
|
1月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
1月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3
|
1月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
53 1
|
1月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
19 1