😁博客主页😁:🚀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的委托构造函数是什么,怎么声明、定义?怎样使用?
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁