c++类与对象之初始化列表

2024-09-04 15:20
文章标签 c++ 对象 初始化 列表

本文主要是介绍c++类与对象之初始化列表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.什么是初始化列表

1.再谈构造函数

在创建对象时,我们一般会在含参构造函数中赋值:

但实际上,这些值不是成员变量的初始值!!这种操作也不是成员变量的初始化!!!

那么对象的初始化在哪里呢?就在初始化列表

2.初始化列表

如下就是我们显式定义的初始化列表:

以冒号开头,每个成员之间以逗号分隔,每一个成员变量后面跟一个放在括号中的初始值或表达式

同时,在显式定义时,不是必须要将所有的成员都赋值,没有进行显式赋值的,编译器会自动处理

二.特性

1.初始化列表是每个成员定义的地方

什么是初始化?初始化就是在创建变量的同时给该变量一个初始值。而当进入构造函数体内部时,对象已经创建好了,说明对象中的成员变量就已经创建好了,那时候就不能叫做初始化了,而是对以已经创建的变量进行赋值

那哪里是成员声明的地方?如下:

2.初始化列表的执行顺序就是成员变量声明的顺序

如上,通过调试会发现,一定是先初始化month再初始化day,和列表中写的顺序无关

2.初始化列表在构造函数之前执行

执行完初始化列表,其实对象就创建出来了,此时构造函数内部就是简单的赋值操作

3.const成员,必须在定义时初始化

如果只有声明,就会编译不通过,所以要给他一个初始值。但要是放在构造函数的函数体内,由于能够走到构造函数体内,就说明对象已经定义了,那么成员变量就也已经定义了,那就不符合const变量要在定义时初始化这个要求了。所以要在初始化列表中进行初始化

所以如上,可以在初始化列表给定初始值

4.成员变量定义了引用,也要在定义时进行初始化

之前说过,引用必须初始化,所以可以在初始化列表中进行定义

5.默认初始化列表

编译器提供的默认初始化列表:对于内置类型是初始化为随机值;对于自定义类型则调用它的默认构造函数。

6.自定义类型的成员没有默认构造时

若没有默认构造只有一个有参构造,则必须在定义时进行初始化!!!

如图,没有默认构造时,必须在初始化列表进行初始化:

7.缺省值

如下:

在声明处给定的值其实是一个缺省值。进行初始化列表时,如果没有给参数,那就会使用缺省值

如上,最终结果是:2023-1-2   _a=2

但注意!!!!!!!!!!!!!!!自定义类型不能在声明时给出缺省值:

8.初始化列表可以和函数混合使用

但注意,month和day其实已经在初始化列表中定义过了。

能使用初始化列表就尽量使用。但是有些情况下不能只是用初始化列表,而是要和函数结合使用,比如stack的初始化:

这篇关于c++类与对象之初始化列表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136332

相关文章

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python中DataFrame转列表的最全指南

《Python中DataFrame转列表的最全指南》在Python数据分析中,Pandas的DataFrame是最常用的数据结构之一,本文将为你详解5种主流DataFrame转换为列表的方法,大家可以... 目录引言一、基础转换方法解析1. tolist()直接转换法2. values.tolist()矩阵