C++ static详解,类中的static用法说明

yizhihongxing

C++ static详解

一、static

static 是 C++ 中的关键字,用于表示静态的意思。它可以修饰类的成员变量和成员函数,以及全局变量和函数,具体用法如下:

1.1 类的静态成员变量

类的静态成员变量是指在类中声明的以 static 关键字开头的成员变量。它是归属于类的,而不是归属于类的对象。因此,在创建类的对象时,并没有为静态成员变量分配存储空间,而是在程序编译时就已经把它的空间分配好了,所有的对象共享同一块空间。静态成员变量可以通过类名直接访问。

#include <iostream>

using namespace std;

class Box {
public:
    static int count; // 静态成员变量
    Box(double l = 2.0, double b = 2.0, double h = 2.0) {
        cout << "Constructor called." << endl;
        length = l;
        breadth = b;
        height = h;
        count++; // 静态成员变量自增
    }
    double Volume() {
        return length * breadth * height;
    }
private:
    double length;
    double breadth;
    double height;
};

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

int main() {
    Box box1(3.3, 1.2, 1.5);
    Box box2(8.5, 6.0, 2.0);
    cout << "Total objects: " << Box::count << endl; // 直接访问静态成员变量
    return 0;
}

输出:

Constructor called.
Constructor called.
Total objects: 2

1.2 类的静态成员函数

类的静态成员函数是指在类中声明的以 static 关键字开头的成员函数。它同样是归属于类的,而不是归属于类的对象。因此,它没有 this 指针,这意味着它无法访问非静态成员变量和非静态成员函数。可以通过类名直接调用静态成员函数。

#include <iostream>

using namespace std;

class Box {
public:
    static int count; // 静态成员变量
    Box(double l = 2.0, double b = 2.0, double h = 2.0) {
        cout << "Constructor called." << endl;
        length = l;
        breadth = b;
        height = h;
        count++; // 静态成员变量自增
    }
    double Volume() {
        return length * breadth * height;
    }
    static int getCount() {
        return count;
    }
private:
    double length;
    double breadth;
    double height;
};

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

int main() {
    Box box1(3.3, 1.2, 1.5);
    Box box2(8.5, 6.0, 2.0);
    cout << "Total objects: " << Box::getCount() << endl; // 直接调用静态成员函数
    return 0;
}

输出:

Constructor called.
Constructor called.
Total objects: 2

1.3 全局变量和函数的静态

在全局变量和函数中使用 static 关键字,则它们的作用域被限制在声明所在的文件中,不能被其他文件所访问。

// file1.cpp
#include <iostream>

using namespace std;

static int count; // 静态全局变量

static void printCount() { // 静态全局函数
    cout << "Count: " << count << endl;
}

int main() {
    count = 5; // 静态全局变量赋值
    printCount(); // 直接调用静态全局函数
    return 0;
}

输出:

Count: 5

二、static与const

在 C++ 中,static 也可以用于修饰 const 类型的变量。这种修饰主要用于在头文件中定义常量,防止在多个文件中重复定义。

// constants.h
static const int MAX = 100; // 常量定义

// file1.cpp
#include "constants.h"
#include <iostream>

using namespace std;

int main() {
    cout << MAX << endl; // 直接访问常量
    return 0;
}

// file2.cpp
#include "constants.h"
#include <iostream>

using namespace std;

int main() {
    cout << MAX << endl; // 直接访问常量
    return 0;
}

输出:

100
100

三、总结

本文介绍了 C++ 中 static 关键字的用法。它可以用于修饰类的成员变量和成员函数、全局变量和函数,以及 const 类型的常量。要注意的是,静态成员变量和静态成员函数归属于类,而不是对象,因此可以通过类名直接访问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ static详解,类中的static用法说明 - Python技术站

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

相关文章

  • Win10电脑错误代码0xc0000f怎么办?电脑出现0Xc0000f代码修复方法

    Win10电脑错误代码0xc0000f怎么办? 问题描述 在开机时出现错误代码0xc0000f,导致系统无法正常启动。该问题可能是由于电脑无法读取启动文件引起的。 修复方法 方法1:使用Windows启动修复工具 准备一个可引导的U盘或DVD光盘,插入电脑中并重启电脑。 在Windows启动时按F2、F8或F12等键进入电脑的启动设置,并选择从U盘或DVD光…

    C 2023年5月23日
    00
  • C语言中注释与注意事项的深入讲解

    当我们编写C语言程序时,注释是很重要的组成部分。它可以使我们更好地理解和维护代码。本文将深入讲解C语言中的注释以及使用注释时需要注意的事项。 注释的基本使用方法 在C语言程序中,注释分为两种类型,行注释和块注释。 行注释 行注释是在一行中注释掉整个行的过程。我们可以在代码行的前面加上//来实现行注释。行注释只有一个行结束符能够终止注释。以下是一个例子: in…

    C 2023年5月23日
    00
  • C++深入讲解类与对象之OOP面向对象编程与封装

    C++深入讲解类与对象之OOP面向对象编程与封装攻略 什么是OOP面向对象编程? OOP,全名是Object-Oriented Programming,中文翻译是面向对象编程,它是一种编程方法论和编程思想,其核心思想是将一组数据结构和处理它们的方法组成对象,以及描述对象间的相互关系,实现数据封装,代码重用和灵活性等特性。 OOP面向对象编程实现了三个基本特性…

    C 2023年5月22日
    00
  • C语言学习笔记之VS2022安装使用教程

    下面是C语言学习笔记之VS2022安装使用教程的完整攻略: 1. 下载VS2022安装程序 首先需要从官网下载Visual Studio 2022的安装程序,官网链接为 https://visualstudio.microsoft.com/vs/。在该网址中可以选择自己想要的Visual Studio版本进行下载,下载完成后直接双击安装程序即可开始安装。 2…

    C 2023年5月23日
    00
  • js如何获取object类型里的键值

    获取object类型里的键值可以使用JavaScript语言提供的两种方式:点运算符(.)和方括号([])。 点运算符(.) 点运算符是一种简单直接获取对象属性的方法,使用点运算符需要知道对象中属性的名称。例如,如果要获取下面这个对象中name属性的值,可以这样写: const obj = { name: "张三", age: 18 };…

    C 2023年5月22日
    00
  • c++中的内联函数inline用法实例

    C++中的内联函数inline用法实例 什么是内联函数? 在程序中,当函数被调用时,程序会跳转到函数代码所在的内存地址执行函数代码,执行完毕之后再跳转回调用函数的位置。但是,如果函数的代码非常简单,每次调用时程序执行这个跳转的过程所花费的开销比函数代码还要大,这时就需要使用内联函数。 内联函数就是把函数的代码直接嵌入到调用函数的地方,而不是跳转到函数所在的内…

    C 2023年5月23日
    00
  • win10中0x40000015是什么错误? 0x40000015错误代码的解决办法

    Win10中0x40000015是什么错误?0x40000015错误代码的解决办法 在使用Windows 10时,有时会出现0x40000015错误代码,这是一种Windows操作系统的错误,通常与某些系统文件或设备驱动程序有关。在这篇文章中,将为您介绍0x40000015错误的含义以及解决办法。 错误含义 0x40000015错误指的是Windows操作系…

    C 2023年5月23日
    00
  • C++中的vector容器对象学习笔记

    C++中的vector容器对象学习笔记 什么是vector容器对象? vector容器对象在C++中被定义为动态数组。它可以容纳许多类类型对象(int、double、bool、char等)。和其他数组不同的是,vector容器对象在创建后,可以根据需要动态地调整大小。这意味着可以动态添加或删除元素。 如何定义并初始化vector容器对象? 定义vector需…

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