C++面试基础之static关键字详解

yizhihongxing

C++面试基础之static关键字详解

什么是static关键字

在C++中,static是一个关键字,用于表示类成员或者函数是静态的。静态成员是指属于类的成员,在类被加载时已经分配了内存,并不依赖于实例,而是共享内存的。静态成员被所有类的对象所共享,也可以通过类名直接访问。

static关键字的用法和作用

静态成员变量

声明静态成员变量时需要在前面加上static关键字。静态成员变量存在于类的作用域中,但是它在所有的类对象实例化中只存在一份内存。通过类名直接访问该变量,可以不用实例化对象。

class MyClass {
public:
    static int staticMember;
};

int MyClass::staticMember = 0;

int main(){
    MyClass obj1;
    MyClass obj2;
    obj1.staticMember = 10;
    cout << obj2.staticMember << endl; //输出为10
}

在该示例中,staticMemberMyClass的静态成员变量,被所有实例所共享。每个变量都可以通过类名或者对象来访问这个变量。由于是静态变量,当我们通过obj1实例改变了变量的值后,在无需创建任何新的实例对象的情况下,我们可以看到对象obj2也能访问到新的值。

静态成员函数

类中的成员函数也可以被定义为静态函数。声明静态成员函数时也需要在前面加上static关键字。静态函数不依赖于对象,可以通过类名或对象直接访问该函数,不会包含this指针。静态函数被所有的实例所共享。

class MyClass {
public:
    static void staticMemberFunction(){
        cout << "This is a static member function." << endl;
    }
};

int main() {
    MyClass::staticMemberFunction(); //通过类名直接访问静态函数
    MyClass obj;
    obj.staticMemberFunction(); //通过实例对象访问静态函数
}

static关键字的使用场景

统计对象的数量

在使用类时,有时候需要知道创建了多少个对象。我们可以使用静态成员变量来记录创建的对象的数量。

class MyClass {
private:
    static int count;
public:
    MyClass() {
        count++;
    }
    static int getCount() {
        return count;
    }
};

int MyClass::count = 0;

int main() {
    MyClass obj1;
    cout << MyClass::getCount() << endl; //输出为1
    MyClass obj2;
    cout << MyClass::getCount() << endl; //输出为2
}

缓存中的数据

在使用一些数据时,我们希望它们只被读取一次并缓存起来,这时可以使用静态成员变量来实现。

class Cache {
private:
    static int data;
    static bool isDataLoaded;
public:
    static int getData() {
        if (!isDataLoaded) {
            loadData();
            isDataLoaded = true;
        }
        return data;
    }
private:
    static void loadData() {
        data = 12345678;
    }
};

int Cache::data = 0;
bool Cache::isDataLoaded = false;

int main() {
    cout << Cache::getData() << endl; //输出为12345678
    cout << Cache::getData() << endl; //输出为12345678
}

在该示例中,dataisDataLoaded都是静态成员变量。当第一次调用getData()函数时,如果数据没有被加载,静态成员变量isDataLoaded还是false,这时会调用loadData()函数来加载数据。加载完成数据后,我们将isDataLoaded设置成true,以后每次调用getData()函数时会直接返回缓存中的数据。这种方式可以提高程序的效率和响应速度。

总结

static关键字可以用于类的静态成员变量和静态成员函数。静态成员在类被定义时就已经分配了内存,并且被所有实例共享。静态成员变量可以用于统计类的实例数量或者用于对一些数据进行缓存,提高程序响应速度。静态成员函数一般用于不依赖于对象,不需要通过实例来调用的函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++面试基础之static关键字详解 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • js中int和string的转换

    JS中int和string的转换 在JavaScript中,我们经常需要将数字类型和字符串类型进行相互转换。本文将提供一个完整攻略,介绍JS中int和string的转换,并提供两个示例说明。 将字符串转换为整数 在JavaScript中,可以使用parseInt函数将字符串转换为整数。可以按照以下步骤实现: // 将字符串转换为整数 let str = &q…

    other 2023年5月8日
    00
  • Android 中使用 ViewPager实现屏幕页面切换和页面轮播效果

    Android 中使用 ViewPager 实现屏幕页面切换和页面轮播效果攻略 ViewPager 是 Android 中常用的控件,用于实现屏幕页面切换和页面轮播效果。下面是详细的攻略,包含两个示例说明。 步骤一:添加 ViewPager 到布局文件 首先,在你的布局文件中添加 ViewPager 控件。例如,创建一个名为 activity_main.xm…

    other 2023年9月6日
    00
  • layui之弹出层

    当然,我很乐意为您提供有关“layui之弹出层”的完整攻略。以下是详细的步骤和两个示例: 1. 什么是layui弹出层? layui弹出层是一种基于layui框架的弹出窗口组件,用于在网页中显示弹出窗口。它可以用于显示提示信息、确认对话框、输入框等。 2. layui弹出层的使用 以下是使用layui弹出层的步骤: 2.1 引入layui 在使用layui弹…

    other 2023年5月6日
    00
  • jrebel插件安装配置与破解激活(多方案)详细教程

    JRebel插件安装配置与破解激活(多方案)详细教程 JRebel是一款极其常用的Java热部署插件,可以显著提高开发效率。不过,该插件需要购买才能正常使用。下面是JRebel插件安装、配置和破解激活的多种方案。 方案一:使用激活码 首先从官网下载最新版的JRebel插件,解压到本地。 打开解压后的文件夹,将其中的jrebel.jar和lib文件夹复制到你的…

    其他 2023年3月29日
    00
  • uwsgi为什么要结合nginx去部署python应用

    以下是关于“uwsgi为什么要结合nginx去部署python应用”的完整攻略,包括uwsgi和nginx的作用优势以及两个示例说明。 uwsgi和nginx的作用 uwsgi是一个Web服务器它可以将Python应用程序转换为Web应程序。uwsgi可以处理Python应用的请求和响应,并将它们发送到Web浏览器。uwsgi还可以处理多个请求和响应,使得P…

    other 2023年5月7日
    00
  • mysql 5.7.11 winx64安装配置教程

    MySQL 5.7.11 winx64安装配置教程 MySQL是一种常用的关系型数据库管理系统,本文将针对Windows系统下MySQL 5.7.11 winx64版本的安装和配置进行详细讲解。 1. 下载MySQL 到MySQL官网下载MySQL Community Server 5.7.11 winx64版本。 2. 安装MySQL 运行下载好的MySQ…

    other 2023年6月20日
    00
  • Linux下Python获取IP地址的代码

    获取IP地址的代码攻略 在Linux下使用Python获取IP地址的代码可以通过以下步骤完成: 步骤1:导入必要的模块 首先,我们需要导入一些必要的Python模块来执行IP地址获取的操作。在这个例子中,我们将使用socket模块来获取IP地址。 import socket 步骤2:获取主机名 在获取IP地址之前,我们需要获取主机名。可以使用socket模块…

    other 2023年7月31日
    00
  • Win10最新预览版14393自制ISO镜像下载 32位/64位

    Win10最新预览版14393自制ISO镜像下载攻略 本攻略将详细介绍如何下载Win10最新预览版14393的自制ISO镜像,包括32位和64位版本。以下是具体步骤: 步骤一:准备工作 在开始之前,请确保您已经完成以下准备工作: 确认您的计算机符合Win10最新预览版14393的系统要求。 确保您有稳定的网络连接。 准备一个可用的USB闪存驱动器或空白的DV…

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