[C++11]委托构造函数

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11]委托构造函数相关的知识,希望对你有一定的参考价值。

委托构造函数允许使用同一个类中的一个构造函数调用其他的构造函数,从而简化相关变量的初始化。

注意点:

1.这种链式的构造函数调用不能形成一个闭环(死循环),否则会在运行期抛异常。

2.如果要进行多层构造函数的链式调用,建议将构造函数的调用写在初始化列表中而不是函数体内部,否则编译器会提示形参的重复定义。

3.在初始化列表中调用了代理构造函数初始化某个类成员变量之后,就不能在初始化列表中再次初始化这个变量了。

代码如下:

#include <iostream>
using namespace std;

class Test
{
public:
	Test(){}
	Test(int a)
	{
		cout << a << endl;
	}

	Test(int a, int b)
	{
		cout << a << endl;//跟Test(int a)中的代码一样
		cout << b << endl;
	}

	Test(int a, int b, int c)
	{
		cout << a << endl;//跟Test(int a,int b)中的代码一样
		cout << b << endl;//跟Test(int a,int b)中的代码一样
		cout << c << endl;
	}

	int a;
	int b;
	int c;

};

委托构造函数
代码如下:

#include <iostream>
using namespace std;

class Test
{
public:
	Test(){}
	Test(int a)
	{
		cout << a << endl;
	}

	Test(int a, int b):Test(a)
	{
		cout << b << endl;
	}

	Test(int a, int b, int c) :Test(a, b)
	{
		cout << c << endl;
	}

	int a;
	int b;
	int c;

};

int main()
{
	int a = 2;
	int b = 1;
	int c = 3;
	Test t(a);
	cout << "---------------" << endl;
	Test t1(a, b);
	cout << "---------------" << endl;
	Test t2(a, b, c);
	cout << "---------------" << endl;
	return 0;
}

测试结果:
在这里插入图片描述
在初始化列表中调用了代理构造函数初始化某个类成员变量之后,就不能在初始化列表中再次初始化这个变量了。
在这里插入图片描述
在这里插入图片描述

以上是关于[C++11]委托构造函数的主要内容,如果未能解决你的问题,请参考以下文章

C++11 继承构造函数和委托构造函数

[C++11]委托构造函数

[C++11 类的改进] --- 继承构造函数和委托构造函数

[C++11 类的改进] --- 继承构造函数和委托构造函数

[C++11 类的改进] --- 继承构造函数和委托构造函数

委托构造函数详解,小白也可以看懂