c++面向对象学习,对构造函数和析构函数进行分析
1、析构函数
对象的生命周期结束时,对其进行清理工作。
2、构造函数
在初始化一个对象的时候,系统自动的调用构造函数,如果用户没用定义构造函数,则调用系统默认的构造函数
3、构造函数的分类:
1、按参数类型:无参构造函数和有参构造函数
2、按功能类型:普通构造函数和拷贝构造函数
下面通过代码来更深刻的理解构造函数
ONE:普通类型构造函数
1、无参构造函数格式:
data() //无参构造函数
{
num=0;
cout << "num=" << num << "无参构造函数" <<endl;
}
调用:
void test01()
{
//实例化一个对象,系统自动调用构造函数(默认无参构造)
//隐式调用
data ob1;
//函数结束时,局部对象ob被释放,系统自动调用析构函数
//显式调用
data ob2=data();
}
int main()
{
test01();
return 0;
}
2、有参构造函数格式:
data(int n)
{
num=n;
cout << "num=" << num << "有参构造函数" <<endl;
}
调用:(注:几种调用方法)
void test02()
{
//调用有参构造的几种方法
data ob2(10);//隐式调用
data ob3= data(20);//显示调用
//隐式转换的方式调用有参构造(针对于只有一个数据成员)
data ob4 = 30;
//匿名对象(生命周期只存在于本行代码,然后就会被释放调用析构函数)
data(40);
cout <<"--------" <<endl;
}
int main()
{
test02();
return 0;
}
TWO:
拷贝构造函数格式:
date (const data &ob)
{
cout <<"拷贝构造函数" << endl;
}
调用:
oid test03()
{
data ob1(10);
cout << "ob1.bum=" <<ob1.num <<endl;
//调用拷贝构造函数(如果用户不实现拷贝构造,系统将调用默认的拷贝构造函数)
//如果用户实现了拷贝构造函数,则系统默认的拷贝构造函数被屏蔽
data ob2=ob1; //等值式调用拷贝构造函数
cout << "ob2.bum=" <<ob2.num <<endl;
data ob3(ob1); //隐式调用拷贝构造函数
data ob4=data(ob1); //显示调用拷贝构造函数
}
int main()
{
test03();
return 0;
}
注:旧对象 初始化 新对象的时候 才能用拷贝构造
data ob1(10);
date ob2(ob1); //拷贝构造
data ob3 = data(on1) //拷贝构造
data ob4 = ob1; //拷贝构造
注:下方就不会调用拷贝构造
data ob1(10); //调用有参构造函数
data ob2; // 默认调用无参构造函数
ob2 = ob1; //这里的ob2不是新对象
上图就是对比,最后一个没有用到拷贝构造函数