详细了解构造函数

发布时间:2018-03-13 00:00:00
1、默认构造函数:当没有为一个类定义任何构造函数的情况下,C++编译器会自动产生如Point::Point(){}形式的默认构造函数,但一旦定义了自己的构造函数,系统就不再提供默认构造函数,所以如果程序中定义了有参数的构造函数,又存在需要赋值操作的情况,则必须为它定义一个无参数的构造函数。
2、定义构造函数:①构造函数的名字应与类名同名,并在定义构造函数时不能指定返回类型,即使是void类型也不可以;②多个参数的构造函数有两种表示形式,构造函数后紧跟的单个冒号称为初始化列表;③构造函数产生的对象数组必须为每一个数组元素调用一次构造函数;④如下图1所示例4-4的程序说明了构造函数的定义和执行过程,书中大篇幅详解了这段程序,很好理解。
图1.例4-4
3、外部对象:只是引用在其它地方声明的对象,程序并不为外部对象说明调用构造函数。
4、全局对象:在main函数执行前要调用它们的构造函数,例4-5演示了全局对象,具体意义没有详说。
5、自动调用构造函数:程序员不能再程序中显式的调用构造函数,构造函数是编译系统自动调用的。
图2.例4-5
6、构造函数和运算符new:new、delete之前就接触过了,new用于建立生存期可控的对象,new返回这个对象的指针。例4-6如下图3所示,演示运算符new和构造函数的关系,遇到主函数中的指针就不好理解了,这样理解不知道对不对:Point类产生一个ptr1的对象指针,对象指针再使用Point的构造函数初始化赋值,偏偏这个没有注释。
图3.例4-6
7、构造函数的默认参数:①如果程序定义自己的有参数构造函数,又想使用无参数形式的构造函数,解决的方法是将相应的构造函数全部使用默认参数设计,例4-7如下图4所示,在类体中设计构造函数的默认参数;②若没有为一个类定义无参数的构造函数时,则在说明对象数组时必须提供初始值。
图4.例4-7
8、复制构造函数:①这一小结没有演示程序,讲实在的没怎么理解;②复制构造函数必须使用对象的引用作为形式参数;③如果自定义了复制构造函数,编译器只调用程序员为它设计的复制构造函数。
现在经过脑子中的内容越来越多,好像越来越难以消化了,特别是涉及到指针引用(*/&)的时候就感觉更模糊了,的想学快点都快不起来哦,欲速则不达吧。
加油!
坚持!
推荐文章