对构造函数和析构函数进行分析

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;
}

对构造函数和析构函数进行分析_第1张图片

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;
}

对构造函数和析构函数进行分析_第2张图片

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;
}

对构造函数和析构函数进行分析_第3张图片

注:旧对象 初始化 新对象的时候 才能用拷贝构造

data ob1(10); 
date ob2(ob1); //拷贝构造
data ob3 = data(on1) //拷贝构造
data ob4 = ob1; //拷贝构造

对构造函数和析构函数进行分析_第4张图片

注:下方就不会调用拷贝构造

data ob1(10);  //调用有参构造函数
data ob2;     // 默认调用无参构造函数
ob2 = ob1;    //这里的ob2不是新对象

对构造函数和析构函数进行分析_第5张图片

上图就是对比,最后一个没有用到拷贝构造函数

你可能感兴趣的:(c++)