【C++】构造函数之初始化列表(Initialization list of constructors)

简介: 【C++】构造函数之初始化列表(Initialization list of constructors)

前言

本节是对构造函数的进一步的学习:初始化列表

本节是对构造函数的进一步的学习:初始化列表


提示:以下是本篇文章正文内容,下面案例可供参考

一、初始化与赋值的区别是什么?

大概的意义:

1.初始化是一个变量或者对象产生之时就赋予一个初始值,伴随性质

2.赋值是一个变量或者对象产生之后的任意时刻可以赋予一个值,随意性质

在代码上讲:

基本数据类型没什么区别 如:

int a = 10;//初始化
int b;
b=100;//赋值

数组,结构体 初始化和赋值的形式不同 但是都差不多 如:

struct Node
{
  int a;
}
//初始化
Node no={10};
//赋值
Node no;
no.a=10;//其中,指针成员用"->"
//数组
//初始化
int a[5]={1,2,3,4,5};
//赋值
int b[5];
b[0]=1;//数组的赋值使用下标

引用,const 他们很特殊,只能初始化,不能赋值 如:

const a=10;
a=12;//C3892
int &d;//C2530

二、初始化列表的形式顺序和执行时机

1.初始化列表的形式

函数名 () + : 变量名(要初始化的值)

在花括号之前

注意:如有多个变量需要初始化,则在变量前面加","

class nn
{
public:
  const int a;
  char b;
  nn() :a(10)//函数名 () + : 变量名(要初始化的值)
  {
  }
  nn(char a):b(a),a(10)//如有两或者两个以上的成员,中间用","隔开
  {
  }
};

2.初始化列表的作用

1.和构造函数的区别

1.基本数据类型,用哪个都行

2.引用,const必须用初始化列表 要不然会报错

2.对数据成员初始化的方式

1.可通过数值对数据成员初始化

2.可通过构造函数参数对数据成员进行初始化

3.可通过成员之间相互初始化 注意:成员初始化的顺序

4.初始化的方式很多,根据自己的需要用

3、执行顺序

在构造函数之前初始化

如:创建对象->构造函数中的初始化列表->构造函数主体

4、注意点

多个构造函数,初始化列表绑定所在的构造函数

三、数组和结构体怎么使用初始化列表

1.数组

在括号里不用写东西cc():a()

则a的所有元素为0

和memset是一样的

vc++无效果 但是visual studio有效果

class a
{
public:
  int b[5];
  a():b()
  {
    //b的所有元素都为0  和memset是一样的
  }
}

2.结构体

结构体可以直接赋值

使用初始化列表反而增加了操作的难度

总结

本节课主要讲了初始化与赋值的区别、初始化列表的形式、初始化列表的作用、初始化列表和构造函数执行的先后顺序、数组和结构体如何使用初始化列表


希望各位下去好好复习,这是类的一个很重要的东西:初始化列表


相关文章
|
11天前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
27 7
|
19天前
|
存储 编译器 C++
C++ initializer_list&&类型推导
在 C++ 中,`initializer_list` 提供了一种方便的方式来初始化容器和传递参数,而右值引用则是实现高效资源管理和移动语义的关键特性。尽管在实际应用中 `initializer_list&&` 并不常见,但理解其类型推导和使用方式有助于深入掌握现代 C++ 的高级特性。
16 4
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
105 5
|
1月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
93 4
|
2月前
|
存储 算法 C++
【C++打怪之路Lv10】-- list
【C++打怪之路Lv10】-- list
23 1
|
2月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
28 0
|
2月前
|
C++
C++番外篇——list的实现
C++番外篇——list的实现
23 0
|
2月前
|
存储 C++ 容器
C++入门9——list的使用
C++入门9——list的使用
22 0
|
6月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1041 1
|
5月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。