失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c++ | 初始化1 | 「构造函数用成员初值列」

c++ | 初始化1 | 「构造函数用成员初值列」

时间:2024-03-18 21:30:09

相关推荐

c++ | 初始化1 | 「构造函数用成员初值列」

拷贝构造简单的概念可以看前文c++ | copy构造 copy赋值 | 值传递_tuuzkiii_Tuu的博客-CSDN博客​​​​​​

正文开始,核心:c++规定,成员变量的初始化在构造函数之前

问题描述

定义一个类:

class Tel {..};class AddressBook {public:// 构造函数AddressBook(const std::string& name, const std::list<Tel>& phone);private:std::string thisname;std::list<Tel> thisphone;int somenum;};

定义构造函数:

AddressBook::AddressBook(const std::string& name, const std::list<Tel>& phone) {thisname = name;thisphone = phone;somenum = 1;}

问题出现——这个构造函数里面所做的都是赋值,而不是初始化。整个过程的本质:先通默认构造函数初始化,再用AddressBook构造函数进行赋值,所以第一步是白做的。

解决方法

更好的做法:使用成员初值列(member initialization list),此时构造函数做的是初始化。整个过程的本质:thisname以name为初值进行拷贝构造。

AddressBook::AddressBook(const std::string& name, const std::list<Tel>& phone):thisname(name), thisphone(phone), somenum(1) {}

也可以这样:就是指定nothing作为初始化参数,但要注意,内置类型必须给定初值(somenum)

AddressBook::AddressBook(const std::string& name, const std::list<Tel>& phone):thisname(), thisphone(), somenum(1) {}

如果觉得《c++ | 初始化1 | 「构造函数用成员初值列」》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。