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

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

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 C++11 的 委托构造函数 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、委托构造函数(delegating constructor)
    • ✨2.1 为什么需要委托构造函数?
    • ✨2.2 什么是委托构造函数?
  • 🎄三、声明、定义委托构造函数
  • 🎄四、委托构造函数的使用
  • 🎄五、总结



在这里插入图片描述

🎄一、概述

委托构造函数是C++11标准才支持的功能,也属于构造函数的一种。
委托构造函数在其成员初始化列表调用了本类其他构造函数来完成其部分或全部初始化工作。

本文主要介绍下面几点:
1、为什么需要委托构造函数?什么是委托构造函数?
2、怎样声明、定义委托构造函数?
3、怎样使用委托构造函数?


在这里插入图片描述

🎄二、委托构造函数(delegating constructor)

✨2.1 为什么需要委托构造函数?

使用 委托构造函数 的目的是:避免写重复的代码。

委托构造函数是C++11新增的特性。在没有委托构造函数之前,有时不得不在构造函数中写重复的代码:

// 构造函数定义
CDate::CDate(int year, int mon, int day):Max_Year(2039)
{m_year = year>Max_Year ? Max_Year : year;m_mon = mon;m_day = day;cout << "Calling Constructor" << ", this=" << this <<endl;
}// 构造函数定义
CDate::CDate(int year, int mon):Max_Year(2039)
{m_year = year>Max_Year ? Max_Year : year;m_mon = mon;m_day = 1;cout << "Calling Constructor" << ", this=" << this <<endl;
}// 构造函数定义
CDate::CDate(int year):Max_Year(2039)
{m_year = year>Max_Year ? Max_Year : year;m_mon = 1;m_day = 1;cout << "Calling Constructor" << ", this=" << this <<endl;
}// 构造函数定义
CDate::CDate():Max_Year(2039)
{m_year = 2000;m_mon = 1;m_day = 1;cout << "Calling Constructor" << ", this=" << this <<endl;
}

而使用委托构造函数可以解决这种在多个构造函数中写重复代码的问题。


✨2.2 什么是委托构造函数?

委托构造函数也是构造函数的一种,它在其成员初始化列表中使用了其他构造函数来完成部分或全部初始化工作。

委托构造函数的特点:
1、没有返回值,函数名为类名;
2、成员初始化列表只允许调用一个本类的其他构造函数(可以是委托构造函数),不允许初始化其他成员;
3、函数体可能没有任何实现,只有一个{},也可以实现一部分初始化工作。

如果定义了委托构造函数,则gcc编译时必须指定-std=c++11以支持C++11标准


在这里插入图片描述

🎄三、声明、定义委托构造函数

这个小节以CDate类为例,介绍怎样声明、定义委托构造函数,我们还是以前面那4个构造函数为例.

  • 1、先写好函数名CDate
  • 2、在成员初始化列表里调用本类的一个构造函数,这个调用的构造函数可以也是委托构造函数。下面例子中都是调用CDate(int year, int mon, int day);
  • 3、实现函数体,本类中全部都不实现,只写了{}
CDate(int year, int mon, int day);	// 构造函数声明CDate(int year, int mon):CDate(year,mon,1)	// 委托构造函数
{}CDate(int year):CDate(year,1,1)				// 委托构造函数
{}CDate():CDate(2000,1,1)						// 委托构造函数
{}
//CDate(){CDate(2000,1,1);}			// 报错,没初始化Max_Year

在这里插入图片描述

🎄四、委托构造函数的使用

这个小节主要介绍使用委托构造函数的注意点,以及给出完整的使用例子。

// g++ 21_Delegating_Constructor.cpp -std=c++11
#include <iostream>
using namespace std;class CDate
{
public:CDate(int year, int mon, int day);	// 构造函数声明CDate(int year, int mon):CDate(year,mon,1){}// 委托构造函数CDate(int year):CDate(){}			// 委托构造函数CDate():CDate(2000,1,1){}					// 委托构造函数//CDate(){CDate(2000,1,1);}			// 报错,没初始化Max_Yearvoid show(){cout << "Date: " << m_year << "." << m_mon << "." << m_day << ", this=" << this << endl;}
private:int m_year;int m_mon;int m_day;const int Max_Year;
};// 构造函数定义
CDate::CDate(int year, int mon, int day):Max_Year(2039)
{m_year = year>Max_Year ? Max_Year : year;m_mon = mon;m_day = day;cout << "Calling Constructor(int,int,int)" << ", this=" << this <<endl;
}int main()
{CDate date(2024,06,27);date.show();cout << endl;return 0;
}

在这里插入图片描述

🎄五、总结

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

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

相关文章:

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

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

iCloud邮件全攻略:设置与使用终极指南

标题&#xff1a;iCloud邮件全攻略&#xff1a;设置与使用终极指南 摘要 iCloud邮件是Apple提供的一项邮件服务&#xff0c;允许用户在所有Apple设备上访问自己的邮件。本文将详细介绍如何在各种设备和邮件客户端上设置和使用iCloud邮件账户&#xff0c;确保用户能够充分利用…...

【计算机毕业设计】基于微信小程序的电子购物系统的设计与实现【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…...

CSS实现动画

CSS实现动画主要有三种方式&#xff1a;transition&#xff0c;transform&#xff0c;和animation1。以下是一些详细的逻辑&#xff0c;实例和注意事项&#xff1a; Transition&#xff1a;transition可以为一个元素在不同状态之间切换的时候定义不同的过渡效果。例如&#xff…...

Python+Pytest+Allure+Yaml+Jenkins+GitLab接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人&#xff1a;CesareCheung 更新时间&#xff1a;2024.06.20 一、技术栈 PythonPytestAllureYamlJenkinsGitLab 版本要求&#xff1a;Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 安装python3.7&…...

[OtterCTF 2018]Bit 4 Bit

我们已经发现这个恶意软件是一个勒索软件。查找攻击者的比特币地址。** 勒索软件总喜欢把勒索标志丢在显眼的地方&#xff0c;所以搜索桌面的记录 volatility.exe -f .\OtterCTF.vmem --profileWin7SP1x64 filescan | Select-String “Desktop” 0x000000007d660500 2 0 -W-r-…...

计算机视觉全系列实战教程 (十四):图像金字塔(高斯金字塔、拉普拉斯金字塔)

1.图像金字塔 (1)下采样 从G0 -> G1、G2、G3 step01&#xff1a;对图像Gi进行高斯核卷积操作&#xff08;高斯滤波&#xff09;step02&#xff1a;删除所有的偶数行和列 void cv::pyrDown(cv::Mat &imSrc, //输入图像cv::Mat &imDst, //下采样后的输出图像cv::Si…...

正确重写equals和hashcode方法

1. 重写的原因 如有个User对象如下&#xff1a; public class User {private String name;private Integer age; }如果不重写equals方法和hashcode方法&#xff0c;则&#xff1a; public static void main(String[] args) {User user1 new User("userA", 30);Us…...

数据质量管理-时效性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档&#xff0c;当前数据质量评价指标框架中包含6评价指标&#xff0c;在实际的数据治理过程中&#xff0c;存在一个关联性指标。7个指标中存在4个定性指标&#xff0c;3个定量指标&#xff1b; 定性指标&am…...

python 实例002 - 数据转换

题目&#xff1a; 有一组用例数据如下&#xff1a; cases [[case_id, case_title, url, data, excepted],[1, 用例1, www.baudi.com, 001, ok],[4, 用例4, www.baudi.com, 002, ok],[2, 用例2, www.baudi.com, 002, ok],[3, 用例3, www.baudi.com, 002, ok],[5, 用例5, www.ba…...

1.k8s:架构,组件,基础概念

目录 一、k8s了解 1.什么是k8s 2.为什么要k8s &#xff08;1&#xff09;部署方式演变 &#xff08;2&#xff09;k8s作用 &#xff08;3&#xff09;Mesos&#xff0c;Swarm&#xff0c;K8S三大平台对比 二、k8s架构、组件 1.k8s架构 2.k8s基础组件 3.k8s附加组件 …...

动态规划基础练习

我们需要先从数组较大的开始进行处理&#xff0c;每次考察上下左右的&#xff0c;比较当前存储的最大值和转移来的值&#xff0c;哪一个大一点 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std;int n, m; int a[105][105]; int addx[] { 0,…...

基于Java的地方废物回收机构管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;MIS的总体思想&#xff0c;MySQL数据库 工具&#xff1a;Eclipse&#xff0c;…...

Leetcode 450:删除二叉搜索树中的节点

给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除节点可分为两个步骤&#xff1a; 首先…...

Go 中使用map时注意的问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

english-works

前奏&#xff08;prelude&#xff09;&#xff1a; To build up our body, our school sports meeting was held on our play ground last Thursday. All the students in my class took an active part in sports meeting. It began with an opening ceremony on the play g…...

Kubernetes面试整理-如何利用PodSecurityPolicies来提高集群的安全性?

PodSecurityPolicy (PSP) 是 Kubernetes 中用于定义和控制 Pod 安全配置的策略。通过 PSP,可以设置对 Pod 的一些安全约束条件,从而提高集群的安全性。虽然 PSP 从 Kubernetes 1.21 开始已被弃用,并在 1.25 版本中移除,但在一些旧版 Kubernetes 集群中,PSP 仍然是一个重要…...

YOLO网络结构特点收录

YOLO网络结构特点收录 YOLO&#xff08;You Only Look Once&#xff09;网络结构随着版本迭代不断进化&#xff0c;以下是一些关键版本的网络结构特点概述&#xff1a; YOLOv1 输入&#xff1a;将图像调整至固定尺寸&#xff0c;如448x448像素。骨干网络&#xff1a;初期版本…...

人生最有力,最棒的十句话!

人生最有力&#xff0c;最棒的十句话 1、允许一切事发生&#xff0c;所有一切发生的事不是你能阻挡了的&#xff0c;你接受&#xff0c;他也发生&#xff0c;你不接受&#xff0c;他也发生&#xff0c;你还不如坦然面对接受现实。 2、你焦虑的时候千万不要躺着啥也不干&#xf…...

ASUS华硕A豆14笔记本电脑I421EAYB,I421EQYB_ADOL14EA工厂模式原厂Win11系统安装包下载

适用型号&#xff1a;ADOL14EA笔记本I421EAYB、I421EQYB 链接&#xff1a;https://pan.baidu.com/s/1krU8m_lbApyUfZQo5E4cCQ?pwd0ewl 提取码&#xff1a;0ewl 华硕原装WIN11系统工厂安装包&#xff0c;带有MyASUS WinRE RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...