构造函数和析构函数

来源:互联网 发布:无法淘宝建立私密连接 编辑:程序博客网 时间:2024/06/05 16:09

三种构造函数:

1.无参构造函数

2.有残构造函数

3.copy构造函数

析构函数

构造函数的调用方式:

1.隐式(自动调用)

2.显式(手动调用)

3.copy构造函数的几种调用时机

匿名对象的去和留

#include <iostream>using namespace std;class Test{private:    int a;    int b;public:    Test(){//无参构造函数        a = 3;        b = 5;        cout << "我是构造函数,被执行了" << endl;    }    Test(int _a, int _b){//带参数的构造函数        a = _a;        b = _b;        cout << "我是带参数构造函数,被执行了" << endl;    }    Test(const Test &obj){//赋值构造函数(copy构造函数)        a = obj.a;        b = obj.b;        cout << "我是拷贝构造函数,被执行了" << endl;    }    ~Test(){//析构函数        cout << "我是析构函数,被调用了" << endl;    }    void print(){        cout << "a: " << a << " b: " << b << endl;    }};/* 实验1 */void stage1()//搭建一个舞台,将展示构造函数和析构函数调用的时机{    cout << "experiment 1" << endl;    Test t0;//自动调用(隐式)    Test t1(1, 2);//手动调用(显式)    Test t2 = t1;//用另一个对象去初始化这个对象,会调用copy构造函数    Test t3;    t3 = t1;//直接将一个对象赋值给另一个对象,不调用如何构造函数    //当它们的生命周期结束,编译器会对每个对象调用析构函数}/* 实验2 */void f(Test p){    p.print();}void stage2()//搭建舞台2,将展示当对象做函数参数时的运行机制机制(copy构造函数的调用时机){    cout << "experiment 2" << endl;    Test b;    //1.展示f()函数    f(b);//b实参去初始化形参p,这是会调用copy构造函数,将b拷贝给形参p    //当局部变量p的生命周期完成时,调用p的析构函数}/* 实验3 *///结论:函数的返回值是一个元素(复杂类型的),返回的是一个新的匿名对象,所以会调用匿名对象类的copy构造函数//然后g函数中的A对象会被析构Test g(){    Test A(1, 2);    return A;}void stage3(){    Test B;    B = g();//用匿名对象,赋值给B对象(扶正),然后匿名对象析构,匿名对象赋给B后,立马被析构掉    //再比如    Test B1 = g();//用匿名对象初始化B1,此时c++编译器直接将匿名对象转成B1(扶正)}int main(){   stage1();    stage2();    stage3();    return 0;}

实验1:



实验2:



0 0
原创粉丝点击