C++类静态成员与类静态成员函数详解

C++类静态成员与类静态成员函数详解

1. 什么是C++类的静态成员和静态成员函数?

1.1 静态成员

顾名思义,静态成员属于类而不是某个对象,与类的实例化无关。也就是说,无论有多少个类的对象被创建,静态成员的内存只分配一次,所有的类对象都共享这一内存空间。因此,静态成员也称为"类成员"。

C++类的静态成员可以是静态变量或静态函数。其中静态变量也称为类变量,是所有类对象的公共变量,同时静态变量可以被类的所有方法所访问,而不必通过对象来访问。

实例化后的普通成员变量是属于对象的,每个对象都有自己的一份。而静态成员变量不属于任何对象,所有的对象共享同一份静态成员变量的内存空间。

1.2 静态成员函数

类静态成员函数是不与任何类对象相关联的成员函数,其特点如下:

  • 它们没有this指针,也就是说,静态成员函数中不能访问非静态成员变量或成员函数,只能访问静态成员变量和成员函数。
  • 静态成员函数只能调用静态成员函数或访问静态成员变量,不能调用非静态成员函数或访问非静态成员变量。

静态成员函数主要用于实现与类本身相关的功能,比如类的初始化或清理等。

2. C++类静态成员的定义和访问

2.1 静态成员变量的定义和访问

C++类的静态成员变量定义时需要加上static关键字,并且必须在类中声明,但是在类外面定义,也就是在类定义之外的文件中定义。

class Person{
public:
    static int num; // 声明为静态变量
    static void setNum(int n);
};
int Person::num = 0; // 静态成员变量定义

上述代码定义了一个名为"num"的静态成员变量,初始值为0。在类的外部,需要通过类名加作用域限定符来访问静态成员变量。

#include <iostream>
#include "Person.h"
using namespace std;

int main()
{
    Person p1, p2;
    p1.setNum(1);
    cout << "p1.num = " << p1.num << endl; // 输出: p1.num = 1
    cout << "p2.num = " << p2.num << endl; // 输出: p2.num = 1
    p2.setNum(2);
    cout << "p1.num = " << p1.num << endl; // 输出: p1.num = 2
    cout << "p2.num = " << p2.num << endl; // 输出: p2.num = 2
    return 0;
}

上述代码中,我们创建了两个Person对象p1和p2,在p1中将num的值设置为1,然后通过类名访问p2的num时,发现其值也为1。这是因为静态成员变量是属于类的,所以p1和p2共享同一份num的内存空间。

2.2 静态成员函数的定义和访问

C++类中的静态成员函数定义时也需要加上static关键字。

class Person{
public:
    static void setNum(int n); // 声明为静态函数
};
void Person::setNum(int n) // 静态成员函数定义
{
    num = n; // 静态成员函数中可以直接访问静态成员变量
}

静态成员函数的访问同样需要通过类名加作用域限定符来实现。

#include <iostream>
#include "Person.h"
using namespace std;

int main()
{
    Person::setNum(10);
    cout << "num = " << Person::num << endl; // 输出: num = 10
    return 0;
}

3. 示例

以下是一个示例,演示了如何使用静态成员变量和静态成员函数实现"水果类":

#include <iostream>
using namespace std;

class Fruit{
public:
    static int count; // 静态成员变量
    Fruit(const char* name){ // 构造函数
        this->name = name;
        count++; // 每创建一个Fruit对象,count自增1
    }
    const char* getName(){ // 普通成员函数
        return name;
    }
    static void displayCount(){ // 静态成员函数
        cout << "Total " << count << " fruits." <<endl; // 访问静态成员变量
    }
private:
    const char* name;
};
int Fruit::count = 0; // 静态成员变量的定义与初始化

int main()
{
    Fruit apple("apple");
    Fruit banana("banana");
    Fruit orange("orange");
    Fruit::displayCount(); // 静态成员函数的调用
    cout << apple.getName() << endl;
    cout << banana.getName() << endl;
    cout << orange.getName() << endl;
    return 0;
}

上述代码定义了一个名为"Fruit"的类,其中count成员变量是静态的,而displayCount函数也是静态的。在main函数中,我们创建了三个Fruit对象,每次创建一个对象,count就自增1。最后通过Fruit::displayCount()来调用静态成员函数displayCount,输出count的值为3。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++类静态成员与类静态成员函数详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 华为Mate 8怎么样 华为Mate8全面评测图解

    华为Mate 8怎么样 华为Mate8全面评测图解 华为Mate 8是华为公司于2015年11月发布的一款大屏旗舰手机。其拥有6英寸的大屏幕、高通骁龙810处理器、4GB RAM、16/32/64GB ROM等高端配置,备受市场关注。下面我们来对这款手机进行全面评测,看看它在各方面的表现如何。 设计和外观 华为Mate8采用了一块6英寸的IPS LCD屏幕,…

    C 2023年5月22日
    00
  • C++中this指针的用法及介绍

    针对“C++中this指针的用法及介绍”,我来为您进行详细的讲解与示范。 什么是this指针? 在C++中,this指针是一个指向当前对象的指针。简单来说,就是指向当前对象实例,即类的一个具体对象。通过this指针可以访问对象的属性、方法等。 this指针的用途 this指针的主要作用是用于区分同名的类参数和成员变量。如果类的成员变量与类的参数同名,则可以使…

    C 2023年5月22日
    00
  • Maplesoft Maple 2020官方正式版安装教程图文详细介绍(含下载地址)

    Maplesoft Maple 2020正式版安装教程 本文介绍了Maplesoft Maple 2020正式版的安装方法,包括下载和安装过程。 下载Maple软件 官网下载链接:https://www.maplesoft.com/support/downloads/ 访问上述链接,找到Maple软件的下载链接,选择合适的版本下载。 下载完成后双击安装包,开…

    C 2023年5月22日
    00
  • C语言的基本编写规范你了解吗

    C语言的基本编写规范 C语言作为一门被广泛应用于系统编程、嵌入式编程等领域的编程语言,具有良好的可移植性、效率和灵活性,在编写C语言程序时,遵循基本的编写规范可以提高程序的可读性和可维护性。 以下是C语言的基本编写规范: 1. 文件命名规范 C语言源文件的文件名通常以“.c”结尾,头文件以“.h”结尾。文件名应该简单明了,避免使用中文、特殊字符和空格等,建议…

    C 2023年5月23日
    00
  • 华硕X450C系列笔记本怎么拆机清灰?

    下面是关于华硕X450C系列笔记本拆机清灰的完整攻略: 1. 准备工具和环境 在进行拆机清灰之前,我们需要准备好以下工具和环境: 一个适合拆开笔记本电脑的螺丝刀套装 一块软布或清洁刷子 一瓶压缩气罐或吸尘器 一个安静、平坦的操作环境,最好在桌子上放置一块软质材料,例如毯子或厚垫子,以防止刮伤电脑。 2. 确认拆机方式 在进行拆机清灰之前,你需要确定你的笔记本…

    C 2023年5月22日
    00
  • 基于C语言自制华容道游戏的示例代码

    首先需要说明的是,华容道是一种古老的拼图游戏,通常用于测试思维策略和空间认知能力。现在我将为你提供一份基于C语言自制华容道游戏的示例代码攻略。 1. 游戏介绍 华容道游戏是一款将不同大小的方块放置在一个方格中的游戏,最终目标是将一块木板上的关键方块移动到棋盘的出口处。游戏规则简单,但是有很多不同的问题需要解决,从而使得这个游戏成为一个极好的思维训练工具。 2…

    C 2023年5月24日
    00
  • c语言中main函数用法及知识点总结

    标题:C语言中main函数用法及知识点总结 什么是main函数? 在C语言中,main函数是一个程序的入口,也是程序执行的起点。当程序被调用时,操作系统会首先找到程序中的main函数并执行它。因此,main函数通常是程序中必不可少的一部分。 main函数的定义和格式 main函数的定义和格式如下所示: int main(int argc, char *arg…

    C 2023年5月23日
    00
  • C语言中#if的使用详解

    让我详细讲解一下“C语言中#if的使用详解”的完整攻略。 1. #if的基本用法 if指令是C语言中条件编译的一种方式。它的用法如下: #if condition /* some code */ #endif 其中,condition可以是任何能被求值的表达式,通常是宏定义或预定义宏。如果condition为真,该指令中的代码才会被编译,否则该指令中的代码将…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部