析构函数和构造函数
编译器会提供一个空的无参的析构函数和构造函数,在类的new或者实例化 和delete的时候会自动调用
析构函数:
语法:
<类名> ()
定义
类的初始化函数
一般用于成员变量的初始化赋值
注意事项:
构造函数有参数,所以能够重载
调用方法:
有参调用和无参调用
普通构造和拷贝构造
拷贝构造的一般写法:意思是将构造函数的形参的所有属性拷贝到这个新定义的类实例里面
class Person{ //若不写,则编译器会自动调用默认拷贝构造函数,将参数全部拷贝
Person(const Person &p){
//&引用方式传入,少占用
//const修饰,防止误操作修改
}
}
括号法
Person p1;//默认构造函数
Person p1();//语法有问题,好像是int func()一样
Person p1(10);//有参构造函数
Person p1(p2);//拷贝构造函数
显示法
Person p1;//默认构造函数
Person p1 = Person(10);//有参构造函数
Person p1 = Person(p2);//拷贝构造函数
Person(10);//匿名构造函数,系统运行后会立刻回收,注意:不能匿名拷贝,否则编译器会将其认定为实例化Person(p2);//实例化p2
隐式转换法
Person p1;//默认构造函数
Person p1 = 10;//有参构造函数
Person p1 = p2;//拷贝构造函数
构造函数:
语法:
~<类名> ()
定义
类的清理函数
注意事项:
析构函数不能有参数,所以不能有重载
拷贝构造函数的调用时机
1、用户主动调用拷贝构造函数,用一个已经创建好的对象来创建一个新的对象
2、值传递的方式传入函数的时候会调用拷贝函数(系统自己调用)
3、值方式返回对象(系统自己调用)
构造函数的调用规则
1、默认构造函数,无参,空函数
2、默认析构函数,无参,空函数
3、默认拷贝构造函数,将类中所有成员变量拷贝
若写了有参构造函数,则不会调用默认构造函数
若谢了拷贝构造函数,则不会调用默认拷贝构造函数
构造函数的初始化列表
例子:
class Person{
int m ;
int n;
Person(int a,int b):m(a),n(b){//这里的操作同下面注释的操作一样
//m=a;
//m=b;
}
}