详解c++中的 static 关键字及作用

详解C++中的static关键字及作用

在C++中,static关键字有多种用途和作用。下面将详细介绍这些用途,并提供两个示例说明。

1. 静态变量

在函数内部使用static关键字声明的变量称为静态变量。静态变量与普通变量的区别在于,静态变量的生命周期延长到整个程序的执行期间,而不是仅在函数调用时存在。

示例1:计算函数调用次数

#include <iostream>

void countCalls() {
    static int count = 0;  // 静态变量
    count++;
    std::cout << \"函数调用次数: \" << count << std::endl;
}

int main() {
    countCalls();  // 输出:函数调用次数: 1
    countCalls();  // 输出:函数调用次数: 2
    countCalls();  // 输出:函数调用次数: 3
    return 0;
}

在上面的示例中,静态变量count在每次函数调用时都会保留其值,因此可以用于计算函数被调用的次数。

2. 静态函数

在类中使用static关键字声明的函数称为静态函数。静态函数不依赖于类的实例,可以直接通过类名调用,而不需要创建对象。

示例2:计算两个数的和

#include <iostream>

class MathUtils {
public:
    static int add(int a, int b) {
        return a + b;
    }
};

int main() {
    int result = MathUtils::add(5, 3);
    std::cout << \"结果: \" << result << std::endl;  // 输出:结果: 8
    return 0;
}

在上面的示例中,静态函数add可以直接通过类名MathUtils调用,而不需要创建类的实例。这使得静态函数可以在不创建对象的情况下执行某些操作。

3. 静态类成员变量

在类中使用static关键字声明的成员变量称为静态类成员变量。静态类成员变量在所有类的实例之间共享,只有一个副本存在。

示例3:统计类的实例数量

#include <iostream>

class MyClass {
public:
    static int count;  // 静态类成员变量

    MyClass() {
        count++;
    }

    ~MyClass() {
        count--;
    }
};

int MyClass::count = 0;  // 初始化静态类成员变量

int main() {
    MyClass obj1;
    MyClass obj2;
    MyClass obj3;

    std::cout << \"实例数量: \" << MyClass::count << std::endl;  // 输出:实例数量: 3

    return 0;
}

在上面的示例中,静态类成员变量count用于统计MyClass类的实例数量。每次创建对象时,count会自增,每次销毁对象时,count会自减。通过类名MyClass可以直接访问静态类成员变量。

以上是C++中static关键字的几种常见用途和作用。希望这个攻略对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解c++中的 static 关键字及作用 - Python技术站

(0)
上一篇 2023年8月20日
下一篇 2023年8月20日

相关文章

  • 怎么查看隐藏文件

    查看隐藏文件需要在操作系统中设置,下面是Windows和macOS两种操作系统的查看隐藏文件的具体方法: Windows 在Windows系统中,可以通过下面的步骤来查看隐藏文件: 打开”文件夹选项”对话框。按下Win + E打开文件资源管理器,然后在菜单栏中点击”查看”,在下拉菜单中选择”选项”。 在”文件夹选项”对话框中选择”查看”标签页,向下滚动找到”…

    其他 2023年4月16日
    00
  • unity使用rider作为ide的体验

    Unity使用Rider作为IDE的体验 前言 Unity作为目前最流行的游戏引擎之一,它的易用性与灵活性都得到了众多开发者的青睐。而对于游戏开发者来说,选择好一款IDE是非常重要的。在本文中,我们将会讨论Unity与 JetBrains 均鼎力推荐的 IDE——Rider。 Rider是什么 Rider是一款由JetBrains开发的跨平台的C# IDE,…

    其他 2023年3月29日
    00
  • mysql字符串索引优化方案

    MySQL字符串索引优化方案 在MySQL中,字符串类型字段一般都使用字符集来存储,例如UTF8、GBK、BIG5等。然而,针对这些字符串类型的查询操作,如果没有正确使用索引,会导致查询性能下降严重。本文将介绍MySQL中针对字符串类型字段的索引优化方案。 字符集选择 首先,我们需要选取与实际需求相符合的字符集,并且保证该字符集在MySQL中能够正确存储数据…

    其他 2023年3月29日
    00
  • 手机怎么整理内存里的存储碎片?

    手机内存存储碎片整理攻略 手机内存存储碎片是指在使用过程中产生的无效、废弃的数据片段,会占用宝贵的存储空间并降低手机性能。为了优化手机性能和释放存储空间,我们可以采取以下步骤整理内存中的存储碎片。 步骤一:清理缓存文件 缓存文件是应用程序临时存储的数据,它们可以帮助应用程序更快地加载和运行。然而,长时间累积的缓存文件可能会占用大量存储空间。以下是清理缓存文件…

    other 2023年8月1日
    00
  • 大势至局域网接入认证软件、禁止电脑接入局域网软件V9.0正式发布

    大势至局域网接入认证软件攻略 背景介绍 大势至局域网接入认证软件是一款用于控制用户接入局域网的安全软件。使用该软件可以限制外部电脑接入局域网,增加局域网安全性。该软件V9.0版本正式发布,下面是该软件的详细攻略。 前置要求 在使用大势至局域网接入认证软件前,需要确保以下条件: 确保已经安装了Windows操作系统 确保网络连通并拥有管理员权限 确保计算机已经…

    other 2023年6月25日
    00
  • Build 9926解决了大小写/数字键盘指示灯错乱问题

    Build 9926解决了大小写/数字键盘指示灯错乱问题攻略 在Build 9926中,Windows团队解决了大小写/数字键盘指示灯错乱问题。这个问题在之前的版本中引起了一些困扰,但现在你可以按照以下步骤来解决它。 步骤1: 打开“设置”菜单 首先,点击任务栏上的“开始”按钮,然后点击“设置”图标。你也可以使用快捷键Win + I来打开“设置”菜单。 步骤…

    other 2023年8月16日
    00
  • Typescript使用修饰器混合方法到类的实例

    首先,我们需要明确一下修饰器是什么:修饰器是一种特殊的声明,可以被附加到类的声明、方法、属性或参数上,使得这些声明可以被修改。在 TypeScript 中,修饰器是一个表达式,该表达式被求值后,被附加到声明上。 在TS中,我们可以使用修饰器将方法添加到类的原型中,使这些方法可以在类的实例中被使用。下面,我们将逐步展示如何将修饰器与类混合,以扩展类的功能。 第…

    other 2023年6月27日
    00
  • C++深入刨析类与对象的使用

    C++深入刨析类与对象的使用 什么是类与对象 在 C++ 中,类是对一类事物的抽象描述。类是一个代码模板,它描述了包含在对象中的属性和方法。而对象是类的一个实例。 比如,我们可以定义一个实体类 Person 来描述人的属性和方法,然后我们可以用实例化出来的对象来表示不同的人。比如有人叫张三,有人叫李四,那么我们可以将张三和李四看作是 Person 类的两个对…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部