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

【C++】委托构造函数 【代码】【C++】委托构造函数。 阅读详情

什么是委托构造函数

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

这和定义也是相近的!

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新特性之“委托构造函数”

C++(11):委派构造函数 C++11支持在构造函数的初始化列表里调用其他构造函数,从而简化构造。 被调用的构造函数称为“目标构造函数”,调用目标构造函数的被称为“委派构造函数”。 #include <iostream> using namespace std; class A{ public: A(int i) : A(i, 0, 'a'){} //委派构造函数,将构造任务交给目标构造函数 A(double d) : A(0, d, 'a'){} //委派构造函数,将构造任务交给目标构造函数 A(ch 阅读详情

相关推荐

c++11委托构造函数理解

C++11中引入的委托构造函数是一种允许构造函数在同一个类中调用另一个构造函数的特性。这样做的主要目的是减少代码重复,提高代码的复用性和清晰度。在C++11之前,如果你有多个构造函数,它们之间有共同的初始化代码,你不得不在每个构造函数中重复这些代码。委托构造函数允许你将共同的初始化代码放在一个构造函数中,然后让其他构造函数调用这个构造函数,从而避免代码重复。

weixin_39291964的博客 549

【C++】C++中的委托构造函数详解

避免你有多个参数表不同但是逻辑相近(或者有公共部分)的构造函数的时候,一个逻辑写好几遍造成代码重复。Q:执行的顺序?A:先执行目标构造函数,再执行委托构造函数。

qq_35902025的博客 9944

平台跳跃游戏中的自动寻路,与地图导航扩展

平台游戏:主要的游戏方式是在2D平面上使用各种方式在悬浮平台上进行移动和穿过各种障碍。 现如的平台游戏中的平台特性与种类是很多的,像马里奥(FC)的单向支撑不可穿透的,或魂斗罗(FC)单向支撑可穿透的… \ 超级玛丽 魂斗罗 空洞骑士 蔚蓝 本博文 支撑 上 上 上 左、上、右 上 穿透 无 上、下 无 上(部分) 上下 所以本文主要以向上支撑并上下穿透的平台特性来进行实现 需求分析 在关卡设计后,地形的数据需要自动识别 地形中的平台可上下穿透移动,并可向上站立 平台的移动路..

MOV的博客 3062

【C++ | 委托构造函数】委托构造函数 详解 及 例子源码

👉本文介绍C++11的委托构造函数是什么,怎么声明、定义?怎样使用?

wkd_007的博客 1643

SRAM compiler选项中 Soft Error Repair (SER)

引起的瞬时故障,可能会影响 SRAM 中存储的数据。SER 功能通过某种机制检测并修复这些错误,从而提高存储器的可靠性。在 SRAM 编译器中,

hzmscut的博客 1156

离心泵级间导叶的设计计算

离心泵级间导叶的设计计算高速离心泵级间流道的作用是将第一级复合叶轮流出的高速液流收集起来并送入第二级复合叶轮。级间流道的设计应考虑降低液体的流速,实现动能向压力能转化,减小液体的水力损失。级间流道主要有蜗壳形流道和导叶两种结构形...

cqzc55322的博客 2566

[C++11] 理解委托构造函数

说明:委托构造函数是 C++11 引入的一种特殊类型的构造函数,它通过调用同一个类中的另一个构造函数来初始化对象。这种构造函数在声明时使用符号后跟其他构造函数的初始化列表,而不是在函数体内调用。委托构造函数的主要目的是避免代码重复,并简化多个构造函数之间的共同初始化逻辑。注意:这里所谓的性能提升本质上是减少了成员变量初始化的时间,在一些大型工程中,成员变量初始化往往是很大的,因此要做这样的优化。

wangdsh的博客 2086

从安装到出图:一份给振动测试新手的LMS Test.Lab 2021完整避坑手册(含许可证更新和常见弹窗解决)

本文为振动测试新手提供LMS Test.Lab 2021的完整使用指南,涵盖安装配置、许可证更新、数据采集到频域后处理的全流程。特别针对常见弹窗错误提供解决方案,并详细讲解Colormap时频图分析技巧,帮助用户快速掌握振动数据分析核心技能。

weixin_29268331的博客 990

(C++11)委托构造函数--C++

老板让A、B、C三位员工完成将各自资料送交办公室任务.(C++中初始化成员) ,虽然三位员工手中的资料不同(各成员列表), 但是需要完成的操作是相同的(初始化), 都是送往办公室。所谓 委托环(delegation cycle) 是指某类中有一个若多个委派构造函数, 然后在这些若干个的委派构造函数中, 某些目标构造函数可能同时是委派构造函数。在委托构造函数内, 成员初始值列表的唯一入口便是类名本身。, 因此, 构造函数的特性都适合委托构造函数, 比如: 没有返回值, 可以有一个或多个参数, 有函数体等。

小志的博客 2298

逆向解析喜马拉雅新版xm-sign算法:从dws.1.6.8.js到签名生成

本文详细解析了喜马拉雅新版xm-sign算法的逆向破解方法。通过定位核心JS文件dws.1.6.8.js,构建本地Node.js模拟执行环境,并解密关键参数cid与appKey,最终实现签名算法的本地化稳定生成,为数据采集提供可靠解决方案。

weixin_29250403的博客 214

数字IC/FPGA 秋招知识点不全面整理

数字IC/FPGA 秋招知识点不全面整理

w0shishabi的博客 7866

7 C++ 构造函数-委托构造和转换构造

本文介绍了C++中两种特殊的构造函数:委托构造函数和转换构造函数。委托构造函数通过调用同类其他构造函数实现初始化代码复用,需注意避免循环委托和正确管理初始化顺序。转换构造函数允许单参数构造实现隐式类型转换,支持运算符重载和函数参数适配,可使用explicit禁止隐式转换。两者都能提高代码复用性,但需合理使用以避免潜在问题。文中通过日期类、复数类等示例展示了实际应用场景和注意事项。

17208955的博客 1956

ANFIS实现数据非线性回归附Matlab代码

在本文中,我们将介绍如何使用Matlab实现基于MSE的ANFIS非线性回归,并提供相应的源代码。ANFIS是一种融合了模糊逻辑和神经网络的方法,它可以通过学习数据集中的模式来构建一个模糊推理系统。ANFIS的训练过程基于最小化MSE,以提高模型的拟合能力。通过上述代码示例,我们可以使用基于MSE的ANFIS模型对数据进行非线性回归,并获得相应的预测结果。在示例中,我们定义了一个包含两个样本的新输入数据集 X_new,然后使用训练好的ANFIS模型进行预测,并将结果存储在变量 Y_pred 中。

2301_79326588的博客 473

详解 C++ 委托构造函数

在 C++11 之前,如果类有多个构造函数,通常需要手动编写重复的初始化代码,或将公共的初始化逻辑提取到一个私有成员函数中。C++11 的委托构造函数允许一个构造函数直接。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 1100

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++ 委托构造函数

委托构造函数通过构造函数间调用链将分散的初始化逻辑集中化,显著提升代码的简洁性和可维护性。适用场景:多构造函数共享初始化逻辑、链式初始化、结合继承。核心规则:初始化列表仅能委托一个目标构造,执行顺序由被委托构造到委托构造。规避陷阱:循环委托、资源初始化冲突、异常安全。

C/C++ 1401

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++构造函数之委托构造函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、委托构造函数是什么?二、使用方式1.函数形式总结 前言 C++11新标准允许用户定义一个委托构造函数,来使用该类的其他构造函数执行自己的初始化过程,这样做的好处是是可以让代码更简洁,节省重复的代码。 提示:以下是本篇文章正文内容,下面案例可供参考 一、委托构造函数是什么? 委托构造函数是C++11新允许的一种构造函数类型,区别于普通的构造函数,它可以使用所属类里的其他构造函数,类似于功能外包。 二、使用方式 1.函数形式

weixin_42561432的博客 1256

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++11 11-委托构造函数 Delegating constructors

委托构造函数:在初始化列表中调用另一个构造函数,不能包含任何执行语句。普通构造函数:在函数体内包含初始化代码,可以包含执行语句。委托构造函数是 C++11 引入的特性,它允许程序员编写更简洁、更易于维护的代码,尤其是在处理具有多个构造函数的类时。通过使用委托构造函数,可以避免在多个构造函数中重复相同的初始化代码。委托构造函数的调用顺序是由你在类定义中指定的初始化列表决定的。这种机制允许你重用代码,减少重复的初始化代码,并保持代码的清晰和可维护性。

wesigj的博客 2199

C++11 继承构造函数与委托构造函数

一、继承构造函数 如果基类的构造函数很多,那么子类的构造函数想要实现同样多的构造接口必须一一调用基类的构造函数,于是C++11 引入继承构造函数。 class _A { public: _A(int _InInt) { ; } _A(double _InDouble, int _InInt) { ; } _A(float _InFloat, int _InInt, const char* _...

xupeng1644的博客 1639

《C++11》委托构造函数详解:深入理解与应用

public:// 构造函数的具体实现// 委托给另一个构造函数完成初始化在上述代码中,第一个构造函数接受两个参数,而第二个构造函数只接受一个参数。第二个构造函数使用了初始化列表的方式,通过委托给第一个构造函数来完成对象的初始化。委托构造函数是 C++11 的一项重要特性,它通过允许一个构造函数调用同一个类中的另一个构造函数来初始化对象,从而减少了代码冗余,提高了代码的可维护性和清晰度。合理使用委托构造函数可以简化类的构造逻辑,使代码更加简洁和易于管理。

码事漫谈 1106

委托构造函数 (来自C++11)

委托构造函数delegating constructor Herb Sutter & Francis Glassborow 1        问题的背景 1.1      简介 C++没有提供让一个构造函数去委托另一个构造函数执行构造操作的机制。这意味着不能(或不提倡)使用缺省参数,类的维护者不得不编写并维护多个构造函数。这会导致源代码和目标代码的重复,降低了可维护性(由于可能引起不一致

hyqsong的专栏 1万+

委托构造函数是什么?

传统C++中,一个类如果有多个构造函数(重载),它们往往会有很多重复的初始化代码。比如:

weixin_45715405的博客 986

C# 委托变量的构造函数是什么

在C#中,委托(delegate)是一种类型安全的、面向对象的函数指针。委托类型定义了方法的签名,委托变量则引用了具有该签名的方法。值得注意的是,委托本身并没有像类那样的构造函数。综上所述,委托变量在C#中是通过引用方法、匿名方法或Lambda表达式来进行初始化的,而不是通过传统的构造函数。Lambda 表达式是 C# 3.0 引入的,它们提供了一种更简洁的方法来初始化委托变量。你可以直接将一个具有匹配签名的方法赋值给一个委托变量。方法调用它(不过更常见的是直接使用委托变量调用)。

Major_S的博客 1328

C++11委托构造函数和继承构造函数:从入门到精通

委托构造函数是C++11引入的一个特性,它允许一个构造函数调用同一个类中的另一个构造函数来完成对象的初始化。这种特性可以减少代码冗余,提高代码的可维护性,同时也使得代码结构更加清晰。例如,在一个类中可能有多个构造函数,它们之间存在一些重复的初始化代码,使用委托构造函数可以避免这些重复代码的出现。在C++11之前,如果基类有多个构造函数,派生类需要为自己需要用到的每一个基类构造函数编写对应的构造函数,即使这些派生类构造函数只是简单地将参数传递给基类构造函数。这不仅增加了代码量,也提高了维护成本。

码事漫谈 1196

委托构造函数

如果一个类中重载了多个构造函数,并且在每个构造函数中都需要对某些变量进行初始化,这时候就会出现很多重复的代码,C++11中引入了委托构造函数,就是为了解决这个问题,它允许在同一个类中一个构造函数可以调用另外一个构造函数,从而可以在初始化时简化变量的初始化。

嵌入式大师之路 567
上一篇: 一文搞定json解析和封装问题,手把手带你学习CJSON开源代码
下一篇: C++11新特性 :函数对象包装器
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值