委托构造函数详解,小白也可以看懂

Posted CodeBowl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了委托构造函数详解,小白也可以看懂相关的知识,希望对你有一定的参考价值。

什么是委托构造函数

当我还不知道这个东西的时候,看到名字,顾名思义,我理解为委托其他构造函数帮忙构造。

这和定义也是相近的!

C++11 引入了委托构造的概念,这使得构造函数可以在同一个类中一个构造函数调用另一个构造函 数,从而达到简化代码的目的

为什么要有委托构造函数?

避免你有多个参数表不同但是逻辑相近(或者有公共部分)的构造函数的时候,一个逻辑写好几遍造成代码重复。

这里要更好的理解,需要将一个故事

如图1, 班主任要求A、B、C三位同学完成将各自资料送交办公室任务.(C++中初始化成员) ,虽然三位同学手中的资料不同(各成员列表), 但是需要完成的操作是相同的(初始化), 都是送往办公室。按照C++98的做法, 则需要A、B、C三位同学各自重复相同操作。这显示是不必要的. 对于C++11, 完全可以将这个工作委托给一个同学(充当目标构造函数, 后面会专门将到)去间接完成, 这样便省去了大量的重复性劳动。

委托构造函数也是构造函数, 因此, 构造函数的特性都适合委托构造函数, 比如: 没有返回值, 可以有一个或多个参数, 有函数体等。委托构造函数也有一个成员初始值列表和函数体。 在委托构造函数内, 成员初始值列表的唯一入口便是类名本身。然后紧接着是以圆括号围起来的参数列表, 这些参数列表必须与类中的另外一个构造函数相匹配。

代码讲解

#include"entrusted_construction.h"


/*******************************************************************************************************
//委托构造函数
C++11 引入了委托构造的概念,这使得构造函数可以在同一个类中一个构造函数调用另一个构造函
数,从而达到简化代码的目的。
*******************************************************************************************************/

#include <iostream>
class Base 
{
public:
	int value1;
	int value2;
	Base()    //目标构造函数
	{
		value1 = 1;
	}
	Base(int value) : Base()  //委托构造函数
	{ // 委托 Base() 构造函数
		value2 = value;
	}
};
void EntrustedConstruction()
{
	Base b(2);  //首先调用Base(int value) : Base() 毫无疑问
    //然后会走到base()中,先给value1复制,然后走到Base(int value) : Base() ,给value2赋值
	std::cout << b.value1 << std::endl;
	std::cout << b.value2 << std::endl;
}

运行结果:

注意事项

1.不能出现”委托环“

所谓 委托环(delegation cycle) 是指某类中有一个若多个委派构造函数, 然后在这些若干个的委派构造函数中, 某些目标构造函数可能同时是委派构造函数。 这样一来, 委派构造函数形成了一个链状结构(如链表的首尾相连情况.), 这就是所谓的“委托环”。

2.构造函数不能同时“委派”和使用初始化列表

参考链接

聊一聊,什么是C++11新特性之“委托构造函数”

以上是关于委托构造函数详解,小白也可以看懂的主要内容,如果未能解决你的问题,请参考以下文章

小白也能看懂的 DFS 算法本质详解

小白也能看懂的 DFS 算法本质详解

netty解码器详解(小白也能看懂!)

Redis主从复制原理详解,小白也能看懂!!!

Git的基本使用方法(0基础小白也能看懂)

Git的基本使用方法(0基础小白也能看懂)