在C++中,类的默认构造函数有六个,他们分别是构造函数,拷贝构造函数,析构函数,赋值操作符重载,取地址操作符重载和const修饰的取地址操作符重载。
类的默认成员函数
1、负责初始化和清理工作的,构造函数负责初始化,析构函数负责清理
2、拷贝复制,拷贝构造函数是使用同类对象初始化创建对象,赋值运算符重载主要是把一个对象赋值给另一个对象。
3、取地址运算符重载,包含取地址运算符重载和const取地址运算符重载。
1 构造函数
构造函数概念
构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。
对于C++而言,为了满足封装的思想,我们通常将数据成员设置为私有属性(private0)或者保护属性(protected),此时我们对于类的对象的初始化,便不能直接在类外进行初始化。但是我们使用对象又必须先定义才能使用,那该怎么办呢?,C++提供了一个好方法,那就是利用构造函数完成对对象的初始化。
构造函数特性
1、函数名与类名相同
2、无返回值
3、对象实例化编译器自动调用对应的构造函数
4、构造函数可以重载
5、如果类中没有显示定义构造函数,则C++编译器会自动生成一个构造函数,一旦用户显示定义,编译器将不再生成
6、无参构造函数和带有缺省值得构造函数都认为是缺省构造函数,并且缺省构造函数只能有一个。
7、构造函数不能用const来修饰。
初始化顺序
1、每个成员在初始化列表中只能出现一次。
2、初始化列表仅用于初始化数据成员,并不指定这些数据成员的初始化顺序,数据成员在类中定义顺序就是在参数列表中的初始化顺序。
3、尽量避免使用成员初始化成员,成员的初始化顺序最好和成员的定义顺序保持一致。(否则容易出现使用未初始化的成员去初始化另一个成员)
类中包含以下成员必须要放在初始化列表中初始化:
(1)引用数据成员
(2)const数据成员
(3)类类型成员(该类没有缺省的构造函数)
默认构造函数
类如果没有显式定义构造函数时,编译器会合成一个默认的构造函数,该构造函数中什么工作都不做。只要显式定义了,即使该构造函数什么也不做,编译器也不会为该类合成默认的构造函数。编译器生成的默认构造函数使用与变量初始化相同的规则来初始化成员