C++构造函数与析构函数
1.构造函数
1.1什么是构造函数?
构造函数是一种特殊的成员函数,与其他成员函数不同,建立对象时自动执行,名字与类名相同,不具有任何类型,无返回值。
1.2什么时候调用构造函数?
在类对象进入其作用域时,调用构造函数。
1.3构造函数没有返回值,因此也不需要在定义构造函数时声明类型。比如在Time类的内部的时候,构造函数应该可以声明为Time()
1.4构造函数不能被用户调用,只是在建立对象的时候系统自动执行一次,构造函数一般声明为public。
1.5构造函数里面可以做一些别的事情,但是一般建议为了保持代码清晰,不要做与初始化无关的事情。
1.6如果用户没有定义构造函数,则系统会默认生成一个什么都不做的构造函数,所以构造函数是一定存在的。
1.7构造函数有几种类型?
A.不带参数的构造函数Time()。
B.带参数的构造函数,如Time(int h,int m,int s)
C.参数初始化表。如Time(int h,int m,int s):hour(h),minute(m),second(s){}
D.系统默认的构造函数。
1.8构造函数可以重载,类似于函数的重载。
1.9默认构造函数是什么?
调用构造函数时不必给出实参的构造函数,称为默认构造函数。所以无参的构造函数属于默认构造函数。
2.0一个类只能有一个默认构造函数。
2.1默认构造函数属于带有默认参数的构造函数。
2.2使用带有默认参数的构造函数的好处?
即使在调用构造函数时没有提供实参值,不仅不会出错,而且还按照默认的参数值对对象进行初始化。
2.3应该在什么地方使用带有默认参数的构造函数?
在构造函数的声明处,不能在定义处。
2.4声明默认构造函数的时候,形参名可以省略,如Box(int =10,int =10,int =10)
2.5全部参数都有默认值的构造函数是默认构造函数,因为一个函数里面只能有一个默认构造函数,所以不能定义多个这样的函数。
比如:
Box(); //声明了一个无参的构造函数
Box(int =10,int =10,int =10); //声明了一个全部参数都指定了默认值的构造函数。
在建立对象时 Box box1;
编译系统就无法识别调用的是哪一个构造函数,会导致编译出错。
2.6一般不应同时使用构造函数的重载和默认参数的构造函数,因为默认参数的构造函数相当于多个重载的构造函数。
2.析构
3.调用构造函数和析构函数的顺序
1.1先构造的后析构,后构造的先析构。(有点像栈)4.特殊的构造函数(复制构造函数,转化构造函数