C++中包含初始化列表的构造函数

编程入门 行业动态 更新时间:2024-10-28 20:17:07

C++中包含<a href=https://www.elefans.com/category/jswz/34/1770206.html style=初始化列表的构造函数"/>

C++中包含初始化列表的构造函数

C++中包含初始化列表的构造函数

构造函数对初始化成员变化很有用。另一种初始化成员的方式是使用初始化列表。对于程序中接受两个参数的构造函数,其包含初始化列表的变种类似于下面这样:

class Human
{
private:string name;int age;
public:// two parameters to initialize members age and nameHuman(string humansName, int humansAge):name(humansName), age(humansAge){cout << "Constructed a human called " << name;cout << ", " << age << " years old" << endl;}// ... other class members
};

格式为:

:成员变量1(参数1),成员变量2(参数2)

编译器会将初始化列表一一转换成代码,并将这些代码放在用户编写的代码之前。

初始化列表的效果:

在类定义中声明成员变量时,不建议使用初始化语句进行初始化(例如 int x = 0),因为这种初始化方式将在构造函数调用之前执行,可能会导致其他部分的代码不能引用该成员变量的问题。初始化列表的方式是一种更好的初始化数据成员的方式,因为它将初始化操作与构造函数调用分开,可以保证成员变量的正确使用。使用初始化列表可以提高程序的效率和可读性,因为它可以避免在构造函数体中进行初始化,从而减少了构造函数的执行时间。使用初始化列表还可以确保各个成员变量被正确地初始化,从而避免因未初始化导致的错误。

初始化列表由包含在括号中的参数声明后面的冒号标识,冒号后面列出了各个成员变量及其初始值。初始值可以是参数(如 humansName),也可以是固定的值。使用特定参数调用基类的构造函数时,初始化列表也很有用。

何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的克访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。 代码如下:struct foo{ string name ; int id ; foo(string s, int i):name(s), id(i){} ; // 初始化列表};构造函数的两个执行阶段构造函数的执行可以分成两个阶段,初始化阶段和计算阶段,初始化阶段先于计算阶段。

在以下示例程序中, Human 类包含一个带初始化列表的默认构造函数,该默认构造函数的参数都有默认值:

#include <iostream>
#include <string>
using namespace std;class Human
{
private:int age;string name;public:Human(string humansName = "Adam", int humansAge = 25):name(humansName), age(humansAge){cout << "Constructed a human called " << name;cout << ", " << age << " years old" << endl;}
};int main()
{Human adam;Human eve("Eve", 18);return 0;
}

输出:

Constructed a human called Adam, 25 years old
Constructed a human called Eve, 18 years old

分析:

第 11~16 行的构造函数包含初始化列表,且用于设置 name 和 age 的参数分别包含默认值“Adam” 和 25。因此,第 21 行创建 Human 类的实例 adam 时,由于没有提供参数值,所以自动将默认值赋给了其成员;而第 22 行创建 eve 时提供了参数值,所以这些值将分别赋给 Human::name 和 Human::age。

注意:

也可使用关键字 constexpr 将构造函数定义为常量表达式。在有助于提高性能的情况下,
可在构造函数的声明中使用这个关键字,如下所示:class Sample{const char* someString;public:constexpr Sample(const char* input):someString(input){ // constructor code }};

该文章会更新,欢迎大家批评指正。

推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程

更多推荐

C++中包含初始化列表的构造函数

本文发布于:2023-11-16 18:05:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1630604.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:初始化   函数   列表

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!