C++构造函数

C++中构造函数是特殊的成员函数,只要定义类的新对象就会执行构造函数,构造函数是保证每个对象的数据成员具有合适的初始值。

构造函数特点:

1)构造函数与类同名,不能指定返回类型,且不能声明为const函数,详见const的使用

2)构造函数可以重载,所以可以有多个构造函数

	sales_item(void) /*const*/;
	sales_item(istream &is /*= cin */);
	sales_item(const string & book ); //must const 	
	sales_item(const sales_item &org);
3)调用构造函数,使用不同的实参就会调用不同的构造函数,如下

	sales_item sales0;
	sales_item sales1("hello world");  
	sales_item("hello world"); //也可以
	sales_item sales2 = sales_item("123456"); //定义
	sales_item sales3(cin);

构造函数的初始化式:

函数后面可以包含一个初始化列表,原型为形参后紧跟一个冒号,然后就是以逗号分开的数据成员列表,初始化值放在圆括号内,如下

sales_item::sales_item(void)
	: isbn(1,‘0‘), units_sold(0), revenue(0.0), a(0), b(a){}
初始化注意之处:

1)构造函数分两阶段进行,初始化阶段和普通的计算阶段(计算阶段就是函数体中的语句)

2)未提供显式初始化的变量使用与初始化变量相同的规则进行初始化,内置或者复合类型依赖与作用域,局部不初始化全局初始化为0,类类型使用默认的构造函数

3)必须提供初始化列表的情况,如下

screen::screen(void)//contents由string默认构造函数初始化
	: nConstVar(0)/*contents("")*/,cursor(0),height(0),width(0),access_ctr(0){}
const int nConstVar; //必须在直接初始化列表进行初始化,如果在函数体中就会出错,还有就是引用的初始化,如下
sales_item::sales_item(void)
	: isbn(1,‘0‘), units_sold(0), revenue(0.0), a(0), b(a){}
int &b; b一定要显式初始化

4)初始化的次序,最好严格按照初始化顺序初始化,尽可能避免使用成员来初始化,最好统一使用形参来进行初始化

class x {
	int i;
	int j;
public:
	x(int val):j(val), i(j){};
};
这里我在vs2012编译下通过了,显式初始化次序对这个没有影响,在gcc version 4.4.1使用g++编译同样通过,不知道这个规则当初制定的原因

5)类类型的初始化可以使用该类型的任意构造函数,也可以使用默认的构造函数

C++构造函数

上一篇:GLSL变换颜色的三角形(C语言)


下一篇:Minus-C 一个最小化的C语言规范