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

embedded/2024/11/14 3:56:56/

文章目录

    • 委托构造函数
    • 为什么要有委托构造函数
    • 代码解释
    • 注意事项

委托构造函数

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

为什么要有委托构造函数

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

例如:
老板让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. 构造函数不能同时“委派”和使用初始化列表。


http://www.ppmy.cn/embedded/136930.html

相关文章

nacos集群AP架构源码解析

1 心跳检测 核心类&#xff1a;ClientBeatCheckTask 核心方法&#xff1a;run public void run() {try {//1 集群状态下心跳处理if (!getDistroMapper().responsible(service.getName())) {return;}if (!getSwitchDomain().isHealthCheckEnabled()) {return;}List<Instance…

C++ 中的智能指针(Smart Pointer)

C 中的智能指针&#xff08;Smart Pointer&#xff09;是用于管理动态内存分配的工具&#xff0c;它们能够自动管理资源的生命周期&#xff0c;避免内存泄漏。智能指针是 C11 标准引入的&#xff0c;通过模板类封装原生指针&#xff0c;实现资源的自动释放。主要的智能指针包括…

97_api_intro_imagerecognition_pdf2word

通用 PDF OCR 到 Word API 数据接口 文件处理&#xff0c;OCR&#xff0c;PDF 高可用图像识别引擎&#xff0c;基于机器学习&#xff0c;超精准识别率。 1. 产品功能 通用识别接口&#xff1b;支持中英文等多语言字符混合识别&#xff1b;formdata 格式 PDF 文件流传参&#xf…

[极客大挑战 2019]HTTP 1

[极客大挑战 2019]HTTP 1 审题 看到题目页面发现没啥东西&#xff0c;直接看源码发现了&#xff0c;Secret.php 进入查看题目&#xff0c;发现又是一道跟着提示达到条件的题目 知识点 跟着题目走。 解题 题目说不是来自https://Sycsecret.buuoj.cn的访问&#xff0c;但是我…

深入了解区块链:Web3的基础架构与发展

在数字时代的浪潮中&#xff0c;区块链技术正逐渐成为Web3的重要基础&#xff0c;重新定义互联网的结构和用户体验。Web3不仅是一个全新的网络阶段&#xff0c;更代表了一种去中心化的理念&#xff0c;强调用户主权和数据隐私。本文将深入探讨区块链在Web3中的基础架构、技术特…

【Transformer】模型输出模块处理

目录 输出处理模块步骤1. 交叉注意力后的输出向量2. 线性变换&#xff08;投影&#xff09;3. Softmax 操作4. 选择最大概率的单词5. 输出词并进入下一轮预测总结&#xff1a; 线性变换详解1. 交叉注意力后的输出向量2. 线性层的参数3. 线性变换的计算4. Softmax 转换为概率示例…

Linux - 信号

文章目录 一、信号的定义二、查看信号三、产生信号1、指令2、系统调用3、由软件条件产生信号4、异常5、键盘输入 四、保存信号1、补充&#xff1a;信号其他相关概念2、信号保存在哪&#xff0c;怎么保存&#xff1f;3、信号集操作函数 五、捕获信号1、概念2、捕获信号的时机3、…

《Foundation 图标参考手册》

《Foundation 图标参考手册》 介绍 Foundation 图标参考手册是一个综合资源,旨在为设计师、开发人员和用户提供关于 Foundation 图标框架的详尽信息。Foundation 是一个流行的前端框架,以其响应式设计和易用性而闻名。本手册将深入探讨 Foundation 图标集,包括其特点、使用…