C++示例讲解初始化列表方法

 更新时间:2022年07月07日 10:41:32   作者:幻荼  
这篇文章主要介绍了C++成员初始化列表,除了可以使用构造函数对类成员进行初始化之外,C++还提供了另外一种初始化的方法,叫做成员初始化列表。下面来看看文章的详细吧,需要的朋友可以参考一下

定义

我们先来看一个例子

Date(int year, int month, int day)//带参构造函数
        :_year(year)
        , _month(month)
        , _day(day)
    {}

这是一个简单的初始化列表案例,以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括 号中的初始值或表达式。

特性

A.初始化列表能只能初始化一次,多次初始化会报错

Date(int year = 2022, int month = 4, int day = 19)//这是一般的构造函数
	{
		_year = year;
		_month = month;
		_day = day;
        _day = day;//这里_day初始化了两次,编译器会报错,每个成员只能初始化一次
	}

B.编译器也允许构造函数赋初值和初始化列表初始化混用

Date(int year = 2022, int month = 4, int day = 19)//二者不冲突
		: _year(year) //初始化
		, _month(month)
	{
		_day = day;//注意这里和上面也不能两次重复出现,如_year(year)。这样就重复了,初始化只能出现一次
	}

C.const成员变量、引用成员变量、没有默认构造函数的自定义类型成员只能在初始化列表初始化。

Date(int year = 2022, int month = 4, int day = 19)
		: _year(year) 
		, _month(month)
		, _n(2) //const成员变量必须使用初始化列表进行初始化
	{
		_day = day;
		//_n = 2; //const成员变量不能在函数体内初始化
	}
Date(int year = 2022, int month = 4, int day = 19)
		: _year(year) 
		, _month(month)
		,_ref(year)//引用成员变量要在初始化列表初始化
	{
		_day = day;
		//_ref = year; //引用成员变量不能在函数体内初始化
	}
Date(int year = 2022, int month = 4, int day = 19)
		: _year(year) 
		, _month(month)
		, _a(20)//没有默认构造函数的自定义类型成员变量必须在初始化列表进行初始化
	{
		_day = day;
	}

const成员变量、引用成员变量、没有默认构造函数的自定义类型成员变量必须在初始化列表内初始化的原因:

1.初始化列表是对象的成员变量定义的地方。

2.对象的内置类型成员变量在初始化列表定义时没有要求必须初始化,因此既可以在初始化列表进行初始化,也可以在构造函数体内初始化。

3.const成员变量、引用成员变量、没有默认构造函数的自定义类型成员变量不能先定义再初始化,它们在初始化列表内定义,并且必须在定义时就初始化,因此必须在初始化列表内初始化。

同时构造函数的执行可以分成两个阶段,初始化阶段和计算阶段,初始化阶段先于计算阶段。

初始化阶段

所有类类型(class type)的成员都会在初始化阶段初始化,即使该成员没有出现在构造函数的初始化列表中。

计算阶段

一般用于执行构造函数体内的赋值操作。

成员变量的初始化顺序

class Date
{
public:
    Date(int year, int month, int day)//初始化是根据定义的先后顺序,如year第一个定义,就第一个初始化
        :_month(month)//第二个初始化
        , _year(year) //第一个初始化
        , _day(day)   //第三个初始化
    {}
private:
    int _year; //第一个定义
    int _month;//第二个定义
    int _day;  //第三个定义
};

到此这篇关于C++示例讲解初始化列表方法的文章就介绍到这了,更多相关C++初始化列表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ 中的Swap函数写法汇总

    C++ 中的Swap函数写法汇总

    这篇文章主要介绍了C++ 中的Swap函数写法汇总,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 教你分辨C++堆与栈的区别

    教你分辨C++堆与栈的区别

    堆与栈的区别有:1、栈由系统自动分配,而堆是人为申请开辟;2、栈获得的空间较小,而堆获得的空间较大;3、栈由系统自动分配,速度较快,而堆一般速度比较慢;4、栈是连续的空间,而堆是不连续的空间
    2021-06-06
  • 使用C语言如何输出逆序数

    使用C语言如何输出逆序数

    逆序数的就是把一个数倒过来,例如:1234那么它的逆序数就为4321,我们该如何是实现呢?下面这篇文章主要给大家介绍了关于使用C语言如何输出逆序数的相关资料,需要的朋友可以参考下
    2022-01-01
  • c++ vector造成的内存泄漏问题

    c++ vector造成的内存泄漏问题

    这篇文章主要介绍了c++ vector造成的内存泄漏问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 浅谈C++基类的析构函数为虚函数

    浅谈C++基类的析构函数为虚函数

    本文重点:应该为多态基类声明虚析构器。一旦一个类包含虚函数,它就应该包含一个虚析构器。如果一个类不用作基类或者不需具有多态性,便不应该为它声明虚析构器。
    2015-10-10
  • C语言 常量详解及示例代码

    C语言 常量详解及示例代码

    本文主要讲解C语言 常量,这里整理了 C语言常量的基础知识,并附代码示例和示例详细讲解,希望能帮助开始学习C 语言的同学
    2016-08-08
  • C语言实现餐饮管理系统

    C语言实现餐饮管理系统

    这篇文章主要为大家详细介绍了C语言实现餐饮管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C语言中memcpy 函数的用法详解

    C语言中memcpy 函数的用法详解

    这篇文章主要介绍了C语言中memcpy 函数的用法详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • 基于memset()函数的深入理解

    基于memset()函数的深入理解

    本篇文章是对memset()函数又进行了深一步的了解,需要的朋友参考下
    2013-05-05
  • C++实现车票管理系统

    C++实现车票管理系统

    这篇文章主要为大家详细介绍了C++实现车票管理系统,连接数据库MySQL,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论