微信订阅号做微网站,申请绿色网站,西安专业承接网站搭建模板,启动网站建设的请示目录 前言 01 如果不用成员列表如何初始化变量
02 成员列表初始化
03 为什么要使用成员列表初始化呢#xff1f;
04 案例代码 前言
本期我们聊聊构造函数初始化列表。
你应该经常使用成员初始化列表#xff0c;如果你不喜欢这种代码风格#xff0c;建议你还是慢慢习惯吧…
目录 前言 01 如果不用成员列表如何初始化变量
02 成员列表初始化
03 为什么要使用成员列表初始化呢
04 案例代码 前言
本期我们聊聊构造函数初始化列表。
你应该经常使用成员初始化列表如果你不喜欢这种代码风格建议你还是慢慢习惯吧因为这不仅仅是代码风格的问题它有功能上的区别如果不使用它们就会浪费性能。
那什么是成员初始化列表呢 与其他函数不同构造函数除了有名字参数列表和函数体之外还可以有初始化列表初始化列表以冒号开头后跟一系列以逗号分隔的初始化字段。 01 如果不用成员列表如何初始化变量
这是我们在构造函数中初始化类成员变量的一种方式当我们编写一个类并向该类添加成员时通常需要某种方式对这些成员进行初始化这些操作通常会在构造函数中完成。
我们有两种方法可以在构造函数中初始化一个类成员。
我们先看第一种就是的构造函数内初始化
class Dog
{
private:int m_age; //年龄string m_name; //名字double m_weight; //体重}; 这里有一个 Dog类它有 int m_age,double weight ,string name 成员变量还没有任何构造函数我们添加构造函数。 其中一种构造函数是接受 三种变量作为参数的构造函数。 另外创建一个默认构造函数没有任何参数。 我想将参数传入将 Dog对象的变量初始化了
而在无参的构造函数中我们简单的将 name 设为 “Dog”其他参数则设置为0 我们先简单的测试一下当前的代码。
测试代码
#include iostream
using namespace std;class Dog
{
private:int m_age; //年龄string m_name; //名字double m_weight; //体重
public:Dog(int p_age,string p_name,double p_weight){m_age p_age;m_name p_name;m_weight p_weight;}Dog(){m_name Dog;m_age 0;m_weight 0;}void print_animal_messge(){coutname:m_name\t: weight:m_weight \tage:m_ageendl;}
};int main()
{Dog xiaoHuan(15,xiaoHuan,10.1);xiaoHuan.print_animal_messge();return 2;
} 这样做完全没有问题这可能是我们一直都在使用的方式。但是在 C 中实际还有另外一种方法就是使用成员初始化列表。一切都很顺利。
02 成员列表初始化
让我们看看第二种方法来初始化。
与直接设置 m_name 不同这次我们通过成员初始化列表来实现。 在写了构造函数和参数之后我们可以添加一个冒号格式如上。可以在同一行也可以另起一行加一个缩进。然后开始列出你想要初始化的成员。
我们顺便添把其他变量也设置为 0。 有一件事你需要知道你定义了一些变量那么你的成员初始化列表也需要按照顺序完成如果你不按照顺序写有一些编译器会警告你因为不管你怎么写初始化列表它都会按照定义类成员的顺序进行初始化。打乱顺序会导致各种各样的依赖性问题。
在另一个构造函数中我们可以这样做。 运行之后你会发现结果和之前是一样的。
就是这样这就是成员初始化列表。
03 为什么要使用成员列表初始化呢
那么为什么我们要这样做呢它有什么意义吗只是代码风格的问题吗
我建议你这样写代码因为如果你有很多成员变量如果你在函数里面初始化它们就会非常混乱可能很难看出构造函数到底在做什么因为之后你还有某些代码做其它事情但是你的大部分构造函数的内容都只是在初始化变量都是些琐碎、无聊的事情你会很想隐藏它们这就是为什么我建议你这样做。 非成员列表初始化 成员列表初始化 即使是从代码风格的角度来看这样也是很美观的它可以让你的构造函数非常干净易于阅读。
#include iostream
using namespace std;class Dog
{
private:int m_age; //年龄string m_name; //名字double m_weight; //体重
public:Dog(int p_age,string p_name,double p_weight): m_age(p_age), m_name(p_name), m_weight(p_weight){}Dog(string p_name): m_name(p_name), m_weight( 0.2 ), m_age(0){}Dog(){m_name Dog;m_age 0;m_weight 0;}void print_animal_messge(){coutname:m_name\t: weight:m_weight \tage:m_ageendl;}
};int main()
{Dog xiaoHuan(xiaoHuan);xiaoHuan.print_animal_messge();return 2;
}