C++中的构造函数小结
对象的初始化
对象时类的实例,类是不占用空间的,对象是占用空间的。
因为类是抽象的,不占用空间的,所以我们不能再定义类的时候对对象进行初始化操作的。
但是,我们可以定义一个函数,在类实例化一个对象的时候,对对象赋初值,这个函数就叫做构造函数。
构造函数是类在定义对象的时候,自动执行的对对象中的数据进行初始化操作的函数。
构造函数的作用构造函数不同于其他的函数,不需要用户调用它(用户也不可以调用这个函数),而是在建立对象时自动执行的。构造函数的名字必须与类名相同,以便编译系统能识别它并把它作为构造函数处理。
它不具有任何类型,不返回任何值。构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。
===================例子1===================================
当然,构造函数也可以在类外定义:
否则会报错
3.构造函数不需要用户调用,也不能被用户调用。
这样写是错误的:
否则会报错
构造函数是在建立对象时由系统自动执行的,而且只能执行一次。
构造函数一般声明为public,若声明成private就会报错。
带参数的构造函数
上面介绍的构造函数虽然可以初始化对象,但是用来初始化的值都是一样的,这显然不符合实际情况。
带参数的构造函数就是用来解决这个问题的,它可以实现在调用不同对象的时候,用不同的值进行初始化。
一般格式是:
构造函数名(类型1 形参1,类型2 形参2,……)
构造函数的第三个特点是它不能采用常规的调用函数的方法给出实参(如,fun(a,b)),
实参是在定义对象时给出的,定义对象的一般格式是:
类名 对象名(实参1,实参2,……)
也就是说,它是在定义对象的时候进行传值的。
=========================例子2==============================
有两个长方体,其长宽高分别是:(1)12,20,25(2)10,14,20。分别求它们的体积
可以知道:
(1)带参数的构造函数中的形参,其对应的实参在定义对象时给定。
(2)用这种方法可以方便地实现对不同的对象进行不同的初始化。
用参数初始化表对数据成员初始化这种烦好伐不在函数体内对数据成员初始化,而是在函数首部实现。
编译系统是根据函数调用(在类实例化对象的时候自动进行)的时候,是否传值,以及传值的个数和类型进行判断的。(1)调用构造函数的时候,不必给出实参的构造函数,成为默认构造函数(或称为缺省构造函数)。
显然,无参构造函数属于默认构造函数,而且一个类只能定义一个默认构造函数。
(2)尽管在一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。
使用默认参数的构造函数(1)默认参数可以在声明构造函数的时候指定,也可以在定义构造函数的时候指定
Box b2(10,20);对应的结果是200
前面说了,不需要实参也可以调用的构造函数成为缺省构造函数,并且,一个类只能有一个缺省构造函数,也就是说可以不使用参数而调用的构造函数,一个类只能有一个。
其道理是显然的,因为缺省构造函数不唯一的话,编译系统就不知道在实例化对象的时候,没有传递实参的情况下,应该调用哪一个函数了。



