一、作用:初始化和清除对象;
二、定义:
返回值 | void | 名称 | 带参数 | 重载 | |
构造函数 | 无 | 无 | 类名() | 可以 | 可以 |
析构函数 | 无 | 无 | ~类名() | 禁止 | 禁止 |
三、分类:
1、按参数:有参构造函数,无参构造函数
2、按类型:普通构造函数,拷贝构造函数
3、按定义:默认构造函数,自定义构造函数
四、调用方式:
1、括号法:
2、显示法;
3、隐私转换法;
//2.1 括号法,常用
Person p1(10); //有参构造函数
Person p3(p1); //拷贝构造函数
//注意1:调用无参构造函数不能加括号,如果加了编译器认为这是一个函数声明
//Person p2();
//2.2 显式法(等号右边都是匿名对象,左边是对象名)
Person p2 = Person(10); //有参构造
Person p3 = Person(p2); //拷贝构造
//Person(10)单独写就是匿名对象 当前行结束之后,马上析构。创建了一个对象,但没有名
//2.3 隐式转换法
Person p4 = 10; // Person p4 = Person(10);
Person p5 = p4; // Person p5 = Person(p4);
//注意2:不能利用 拷贝构造函数 初始化匿名对象 编译器认为是对象声明 Person (p4) == Person p4(与上边已有的p4重定义)
//Person (p4);
五、用法
1、系统自动调用构造函数和析构函数;
2、如果没有定义构造和析构函数,系统将调用默认构造和析构函数,空实现;
3、构造函数和析构函数必须定义在public里面;
六、拷贝构造函数调用时机:
1、用以创建的对象初始化新的对象;
2、以对象真值在函数中传递参数时;
3、以对象真值的方式返回局部对象;
七、规则
1、未定义情况下,系统会提供三个函数:默认构造函数、默认析构函数、默认拷贝构造函数;
2、如果定义了普通构造函数,那么系统不会再提供默认构造函数,但是会提供拷贝构造函数;
3、如果定义了拷贝构造函数,那么系统不会再提供默认构造函数和普通构造函数;