C++类的静态成员初始化详细讲解

下面详细讲解“C++类的静态成员初始化详细讲解”的攻略。

1. 静态成员的定义和初始化

在C++中,静态成员是指属于类的成员,而不是属于某个对象的成员。它们被定义为类的属性,并且在类的所有实例中共享。静态成员包含静态变量和静态函数。

当定义一个静态成员时,需要在类定义内部进行声明,在类外部进行定义和初始化。其语法格式为:

class ClassName {
  public:
   // 声明静态成员变量或者静态成员函数
   static int staticMember;
};

// 在类外定义并初始化静态成员变量
int ClassName::staticMember = 0;

2. 静态成员的访问

静态成员可以通过类名或者对象名来访问。当通过对象名访问静态成员时,可以使用对象名和点号(.)或者访问运算符(->)。但是,由于静态成员不属于对象,因此最好使用类名来访问静态成员。

class ClassName {
  public:
    static int staticMember;
};

int main() {
  // 使用类名访问静态成员
  ClassName::staticMember = 10;

  // 使用对象名访问静态成员
  ClassName obj;
  obj.staticMember = 20;
}

3. 静态成员初始化的规则

静态成员变量的初始化必须在类外部进行,并且只能进行一次,可以在类定义外定义和初始化静态成员变量,也可以在类定义内部定义和初始化静态成员变量,但那样只适用于C++17及之后的版本。

在C++11之前,只能将静态成员变量定义和初始化分别放在一个源文件中,而不能在类定义内部进行初始化。否则会导致“有多个定义”的错误。

下面是一个在类外部定义和初始化静态成员变量的示例:

class ClassName {
  public:
    static int staticMember;
};

int ClassName::staticMember = 0;

int main() {
  // 使用类名访问静态成员变量
  ClassName::staticMember = 10;

  // 使用对象名访问静态成员变量
  ClassName obj;
  obj.staticMember = 20;
}

4. 静态成员初始化的两个示例

示例1:静态常量成员变量的初始化

静态常量成员变量的初始化需要在类定义内部完成,并且要使用constexpr关键字,表示该成员变量是一个常量,并在编译时被求值。

class ClassName {
  public:
    constexpr static int constStaticMember = 10;
    static int staticMember;
};

int ClassName::staticMember = 0;

int main() {
  // 使用类名访问静态常量成员变量
  std::cout << ClassName::constStaticMember << std::endl;
}

示例2:静态成员函数的初始化

静态成员函数和普通的成员函数一样,它们的初始化也是在类定义内部完成的。和普通成员函数不同的是,静态成员函数只能访问静态成员变量。

class ClassName {
  public:
    static int staticMember;
    static void staticMemberFunc() {
      std::cout << "静态成员函数" << std::endl;
    }
};

int ClassName::staticMember = 0;

int main() {
  // 使用类名访问静态成员函数
  ClassName::staticMemberFunc();
}

以上就是“C++类的静态成员初始化详细讲解”的完整攻略。

阅读剩余 56%

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

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

相关文章

  • Android自定义view之太极图的实现教程

    下面我来详细讲解“Android自定义view之太极图的实现教程”的完整攻略。 1.前置知识 在学习“Android自定义view之太极图的实现教程”前,我们需要学习以下知识: Android绘图API Android绘图API主要包含以下几个核心类:Canvas(画布)、Paint(画笔)、Path(路径)、Rect(矩形)等。我们需要掌握这些类的基本用法…

    other 2023年6月25日
    00
  • 微信小程序vant弹窗组件的实现方式

    下面是“微信小程序vant弹窗组件的实现方式”的完整攻略。 1. 引入vant组件库 首先,在微信小程序中引入vant组件库,可以通过以下步骤完成: 下载vant组件库的代码,可以在github上找到(https://github.com/youzan/vant-weapp)。 将下载的vant文件夹拷贝至小程序项目的根目录下。 在小程序的app.json文…

    other 2023年6月27日
    00
  • xilinxcoe文件格式小记

    xilinxcoe文件格式小记 简介 Xilinx COE是Xilinx Vivado和ISE工具支持的一种文件格式,用于描述数字电路模块中的数据。它是一种纯文本格式文件,可以用任何文本编辑器创建和编辑。 在数字电路的设计中,我们经常需要对数据进行初始化或存储,通常使用的一个较为通用的存储格式就是coe文件格式。每个coe文件格式包含了十六进制偏移量和相应十…

    其他 2023年3月28日
    00
  • 关于protected修饰符详解-源于Cloneable接口

    下面就来详细讲解一下“关于protected修饰符详解-源于Cloneable接口”的完整攻略。 1. protected修饰符的作用 protected 修饰符用于类的成员变量,方法及构造方法,可以让子类访问并修改原本属于父类的该成员变量、方法及构造方法。在同一个包中的其他类中,也可以访问 protected 成员。 2. protected修饰符的使用限…

    other 2023年6月27日
    00
  • JavaScript中React 面向组件编程(下)

    JavaScript中React的面向组件编程可以帮助开发人员更好地组织和管理代码,提高代码的可维护性和可扩展性。下面是一些实用的攻略来帮助你在React中实现面向组件编程。 1. 组件的分解 在React中,一个组件可以看作是一个可重用的代码块,可以通过组合多个小组件来创建一个大型的应用程序。但是,为了开始开发,必须从分解根组件开始。比如,我们想要创建一个…

    other 2023年6月27日
    00
  • php自动加载规范psr4(thinkphp)

    PHP自动加载规范PSR-4(ThinkPHP) 1. 概述 PHP自动加载规范PSR-4是PHP FIG(PHP Framework Interop Group)制定的一种规范,用于规范PHP类的自动加载。该规范定义了一种标准的命名空间和类名映射到文件路径的规则,使得PHP类的自动加载更加方便和高效。 ThinkPHP是一款流行的PHP框架,支持PSR-4…

    other 2023年5月9日
    00
  • 详解Android v1、v2、v3签名(小结)

    下面我将针对“详解Android v1、v2、v3签名(小结)”这篇文章,提供完整的攻略。 总体介绍 该篇文章主要讲解了 Android 应用签名的三个版本 —— v1、v2 和 v3,并介绍了它们的优缺点,以及在使用中需要注意的事项。对于 Android 开发者而言,本文提供了对不同版本签名的详尽了解,能够帮助开发者更好地选择签名版本以及正确地进行签名操作…

    other 2023年6月27日
    00
  • C++超详细讲解拷贝构造函数

    C++超详细讲解拷贝构造函数 什么是拷贝构造函数 C++中的拷贝构造函数是一种特殊的构造函数,用于关于同类对象进行复制初始化。当使用一个对象去初始化另一个同类对象时,就会调用拷贝构造函数。拷贝构造函数通常使用一个类的引用作为其参数,并且不允许传入除该引用以外的任何值。 拷贝构造函数的使用场景 传递类对象给函数时,会调用拷贝构造函数; 返回类对象时,会调用拷贝…

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