构造函数

来源:互联网 发布:linux显示文件行数 编辑:程序博客网 时间:2024/05/17 08:49

写这篇文章的目的是,巩固一下对构造函数的理解。参考《C++Primer 4》。

1.构造函数可以被重载
…………
2.实参决定使用哪个构造函数
…………
3.构造函数自动执行
…………
4.用于const对象的构造函数
构造函数不能声明为const
5.构造函数初始化式
从概念上讲,构造函数分为两个阶段,(1)初始化阶段,(2)计算阶段,计算阶段由构造函数函数体中所有语句组成。另外,不管成员是否在构造函数初始化列表中显示初始化,类类型的数据成员总是在初始化阶段初始化。初始化发生在计算阶段开始之前。
在构造函数初始化列表中没有显示提及的成员,根据变量初始化规则进行初始化。运行该类型的默认构造函数,来初始化类类型的数据成员。内置或符合类型的成员的初始值依赖于对象的作用域:在局部作用域中,这些成员不被初始化,在全局作用域中被初始化为0。
注解:没有默认构造函数的类类型成员,以及不管哪种类型的const或引用类型成员,都必须在构造函数初始化列表中进行初始化。
因为如果没有为类成员提供初始化式,则编译器会隐式的使用成员的默认构造函数。如果那个类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。在这种情况下,为了初始化成员,必须提供初始化式。


6.默认构造函数
只有当一个类没有定义构造函数时,编译器才会自动产生一个默认构造函数。编译器产生的默认构造函数,也按照与变量初始化相同的规则来初始化成员,与上面的相同。(平时我们所说的默认构造函数,就是无参构造函数)
注解:即使定义了其他的构造函数,也应该定义一个默认的构造函数。
7.派生类的默认构造函数
运行derive构造函数的效果是:首先使用base的默认构造函数初始化base部分。base的构造函数执行完之后,再初始化derive部分,并执行derive的函数体。
8.向基类构造函数传递实参