组合类构造函数的调用

组合类构造函数

引言

最近在学习C++的过程中看到组合类构造函数时,发现有2种初始化方式,为了找出其区别,特意写了个小程序来测试。
测试程序如下:

int main()
{
class XB {
		
	public:
		XB(int xx, int yy) :x(xx),y(yy){cout << "XB::constructor!" << endl;}
		XB(XB &xb):x(xb.x),y(xb.y) {cout << "XB::copy!" << endl;}
	private:
		int x;
		int y;
	};

	class XA
	{
	public:
		XA(XB a) :xb(a) { cout << "XA::constructor!" << endl; }//第一种写法
		XA(int xx, int yy) :xb(xx, yy) { cout << "XA::constructor!" << endl;}//第二种写法
		XA(XA &xa) :xb(xa.xb){ cout << "XA::copy!" << endl; }
	private:
		XB xb;
	};

	XB xb_1(1, 2);//调用XB构造函数
	XB xb_2(xb_1);//调用XB构造函数
	XA xa_1(xb_1);//调用XB的复制构造函数2次,再调用XA的构造函数;
	XA xa_2(3,4);//调用XA构造函数
	return 0;
}

结果如图:
在这里插入图片描述
这里需要说明的是:1、XA xa_1(xb_1) 调用的是XB的复制构造函数而非构造函数,至于调用2次,我的理解是在传递参数时调用一次,在执行 xb(xb_1) 再调用一次;2、区分派生类的初始化:派生类是基类名(参数表),组合是对象名(参数表)。
假如XB中没有定义复制构造函数,则会调用默认的复制构造函数,把XB的复制构造函数注释掉,结果如图:
在这里插入图片描述
xa_2调用默认复制构造函数,因此没有输出。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值