关于构造函数

构造函数中不能调用本类中的另一构造函数

class Foo {
public:
	Foo(char x){
		Foo(x, 0);  //本语句无法初始化当前对象!
		}
	Foo(char x, int y);
};

上面例子中,Foo(x,0)语句并不调用当前对象的Foo(char x, int y)函数,而是 产生一个临时对象并对其初始化,然后在语句结束时(分号处)销毁临时对象。因此当前对象并未得到初始化,这恐怕出乎很多人的意料。

解决这个问题,常见的办法是合并构造函数并使用默认参数:

class Foo {
public:
	Foo(char x, int y=0);  //本行合并了两个构造函数
	...
};

如果不方便合并,则可将公共部分放到一个private函数中,规避构造函数的相互调用。示意代码如下:

class Foo {
public:
	Foo(char x)		{	init(x, 0);	}
	Foo(char x, int y)	{	init(x, y);	}
	...
private:
	void init(char x, int y);
};



参考资料: http://www.parashift.com/c++-faq-lite/init-methods.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值