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

news2024/11/26 11:44:38

😁博客主页😁:🚀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_Year
	
	void 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的委托构造函数是什么,怎么声明、定义?怎样使用?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1878896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript学习笔记(全)

文章目录 TypeScript入门2.编译并运行TS代码2.1.简化运行ts步骤 3.TS中的常用类型3.1.TS中的类型注解3.2.TS中的原始类型3.3.TS中的数组类型3.4.TS中的联合类型3.5.类型别名3.6.函数类型3.6.1.单独执行参数、返回值类型3.6.2.同时指定参数&#xff0c;返回值类型3.6.3.函数的vo…

【C++开发必备工具】Dependency Walker与Dependencies

Dependency Walker 与 Dependencies 1. Dependency Walker1.1 功能特点1.2 使用方法1.3 注意事项 2. Dependencies2.1 功能特点2.2 使用方法2.3 注意事项 3. 总结 1. Dependency Walker Dependency Walker 是一个免费软件工具&#xff0c;用于查看 Windows 应用程序的模块&…

el-tree结构清空选中节点

<el-tree:data"data"show-checkboxdefault-expand-allnode-key"id"ref"tree"highlight-current:props"defaultProps"> </el-tree>this.$refs.tree.setCheckedKeys(this.$refs.tree.getCheckedNodes(),false);

【单片机毕业设计选题24037】-基于STM32的电力系统电力参数无线监控系统

系统功能: 系统上电后&#xff0c;OLED显示“欢迎使用电力监控系统请稍后”&#xff0c;两秒后显示“Waiting..”等待ESP8266初始化完成&#xff0c; ESP8266初始化成功后进入正常页面显示&#xff0c; 第一行显示电压值&#xff08;单位V&#xff09; 第二行显示电流值&am…

编码大模型系列:Meta创新的“代码编译优化”的LLM

鲁班号导读正式上线。移步“鲁班秘笈”&#xff0c;查阅更多内容。 大型语言模型 (LLM) 已在各种软件工程和编码任务中展现出卓越的能力。然而&#xff0c;它们在代码和编译器优化领域的应用仍未得到充分探索。训练LLM需要大量资源&#xff0c;需要大量的 GPU时间和大量的数据…

【CodinGame】CLASH OF CODE - 20240630

前言 本文是CodinGame&#xff08;图片来自此&#xff09;随手做的几个&#xff0c;供记录用 要求&#xff1a; 代码 import math import syss input()for n in range(len(s)):print(s[n:])要求 代码 import sys import math# Auto-generated code below aims at helpi…

【01-02】Mybatis的配置文件与基于XML的使用

1、引入日志 在这里我们引入SLF4J的日志门面&#xff0c;使用logback的具体日志实现&#xff1b;引入相关依赖&#xff1a; <!--日志的依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version&g…

ManicTime(屏幕时间统计工具) 专业版值得购买吗

ManicTime 是 Windows 平台上&#xff0c;一款支持跟踪、标记用户在每个软件上所花时间的工具&#xff0c;它能自动归类生成时间使用报表&#xff0c;帮助用户分析及改善工作效率。 ManicTime 不仅会在后台记录、统计所有窗口的使用时间&#xff0c;还能自动截图存档到本地&a…

数据结构-分析期末选择题考点(图)

我是梦中传彩笔 欲书花叶寄朝云 目录 图的常见考点&#xff08;一&#xff09;图的概念题 图的常见考点&#xff08;二&#xff09;图的邻接矩阵、邻接表 图的常见考点&#xff08;三&#xff09;拓扑排序 图的常见考点&#xff08;四&#xff09;关键路径 图的常见考点&#x…

企业数据备份整体规划方案

企业数据备份整体规划设计参考 备份系统前期规划至关重要&#xff0c;需综合考虑多维度因素以达最优解。本文全面探讨企业数据中心备份规划&#xff0c;助您构建高效、稳健的数据保护体系。 随着信息化深入&#xff0c;企业业务系统日益增多&#xff0c;数据规模与类型均显著扩…

等保测评练习16

等级保护初级测评师试题16 姓名&#xff1a; 成绩&#xff1a; 一、判断题&#xff08;10110分&#xff09; 1.虚拟机被非法利用后&#xff0c;可能被当作跳板机。&#xff08;T&#xff09; P312 2.云服务商&#xff0c;为云计算服务…

《Windows API每日一练》7.2 计时器的三种使用方法

如果程序在整个运行过程中需要一个计时器&#xff0c;在WinMain函数中或窗口过程处理WM_CREATE 消息时&#xff0c;调用SetTimer函数创建一个计时器。在离开WinMain函数时或是处理WM_DESTROY消息时&#xff0c;调用KillTimer函数销毁计时器。基于调用SetTimer参数的不同&#x…

C#异常提示.mp3的文件不是一个有效的波形文件

解决方法: 使用格式工厂将mp3格式的文件转为wav格式

从笔灵到AI去痕:全方位提升内容创作与学术诚信

内容为王&#xff0c;在内容创作的世界中尤为重要。然而&#xff0c;面对写作时常常感到无从下手&#xff1a;有时缺乏灵感&#xff0c;有时难以表达清楚自己的想法。AI写作助手的出现&#xff0c;为这些问题提供了创新的解决方案&#xff0c;极大地改变了内容创作的过程。 今…

android轮播图入门1——简单无限自动轮播图

目标 目标是实现一个简单的轮播图&#xff0c;特征如下&#xff1a; 只展示本地图片可以无限轮播&#xff0c;在第一帧时也可以向前轮播可以自动轮播 code 先上代码&#xff0c;需要事先准备几张本地图片当素材 MainActivity: package com.example.loopapplication;import…

快速了解《大模型赋能下的AI2.0数字人平台》白皮书

在生成式AI和大模型的赋能下&#xff0c;数字人迎来AI 2.0时代。它能否成为每个人的“数字分身”&#xff0c;转化为新型的AI劳动力工具&#xff1f;商汤科技与上海市人工智能技术协会、零壹智库、增强现实核心技术产业联盟联合发布《大模型赋能下的AI 2.0数字人平台》。《白皮…

利用微信开放标签<wx-open-launch-weapp>在H5中跳转微信小程序报错完美的解决方案

一、报错&#xff1a; [WXTAG] [JSCORE] The slot <template> or <script type"text/wxtag-template"> of <wx-open-launch-weapp> is missing 二、源码 官方源代码如下&#xff0c;<script type"text/wxtag-template"></sc…

智能社区服务小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;房屋信息管理&#xff0c;住户信息管理&#xff0c;家政服务管理&#xff0c;家政预约管理&#xff0c;报修信息管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;房屋信…

# Sharding-JDBC从入门到精通(3)- Sharding-JDBC 入门程序

Sharding-JDBC从入门到精通&#xff08;3&#xff09;- Sharding-JDBC 入门程序 一、Sharding-JDBC 入门程序&#xff08;水平分表&#xff09;-环境搭建 1、需求说明 使用 Sharding-JDBC 完成对订单表的水平分表&#xff0c;通过快速入门程序的开发&#xff0c;快速体验 Sh…

Unity制作一个简单抽卡系统(简单好抄)

业务流程&#xff1a;点击抽卡——>播放动画——>显示抽卡面板——>将随机结果添加到面板中——>关闭面板 1.准备素材并导入Unity中&#xff08;包含2个抽卡动画&#xff0c;抽卡结果的图片&#xff0c;一个背景图片&#xff0c;一个你的展示图片&#xff09; 2.给…