chap12. 类

1、构造函数初始化列表:

class t {
	public:
		t(int ii);
	private:
		int i;
		const int ci;
		int &ri;
		
	
};

t::t(int ii) {
		i = ii;
		ci = ii;	//error:cannot assign to a const
		ri = i; 	//error: to ri which was not bound to an object
	}

t::t(int ii): i(ii), ci(ii), ri(ii) {
		
}
从概念上讲,可以认为构造函数分两个阶段执行:1、初始化阶段。2、普通的计算阶段(函数体中)

不管成员是否在构造函数初始化列表中显示初始化,类类型的数据成员总是在初始化阶段初始化。初始化发生在计算阶段开始之前。

上面的例子const int ci在初始化阶段已经初始化,不能在函数体中被赋值了。而引用&ri没有绑定到一个对象。

因此,上例中的构造函数只能通过构造函数初始化列表来实现。

2、如果类定义了带有参数的构造函数,则系统不会产生一个默认构造函数了。如果没有显示地定义一个默认构造函数,则不能定义该类的数组了。即node n[10]:这样编译器会报错



你可能感兴趣的:(chap12. 类)