当前位置: 首页 > article >正文

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

文章目录

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

委托构造函数

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.kler.cn/a/389327.html

相关文章:

  • Unity学习笔记(4):人物和基本组件
  • C++初阶:类和对象(上)
  • 继承和多态(上)
  • 结构体(c语言)
  • 十三、注解配置SpringMVC
  • Pycharm PyQt5 环境搭建创建第一个Hello程序
  • 如何在Oracle应用中使用BI PUBLISHER API将RTF转换为XSL-FO
  • XGBoost算法Python代码实现
  • Iceberg 写入和更新模式,COW,MOR(Copy-on-Write,Merge-on-Read)
  • sqli-labs(第二关)
  • ThinkBook 14+ 2024 Ubuntu 触控板失效 驱动缺失问题解决
  • 腾讯自研的 Git 客户端!!【送源码】
  • vue3中使用输入框按回车键刷新页面问题
  • 零拷贝Zero Copy
  • RabbitMQ的应用
  • 【STK学习】part1-卫星轨道与Walker星座基础知识
  • 《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)
  • 信息泄露漏洞一文速通
  • Facebook vs. Google:哪个更适合你的品牌
  • rabbitMq怎么保证消息不丢失?消费者没有接收到消息怎么处理
  • MySQL_聚合函数分组查询
  • 【神经科学学习笔记】基于分层嵌套谱分割(Nested Spectral Partition)模型分析大脑网络整合与分离的学习总结
  • 无人机手势控制工作原理和算法!
  • 【笔记】开关电源变压器设计 - 工作磁通的选择原则
  • 机器学习中的两种主要思路:数据驱动与模型驱动
  • Stable Diffusion WebUI或ComfyUI下载不了huggingface?修改huggingface为国内镜像地址方法在这里