C++之构造函数和析构函数强化

来源:互联网 发布:供应链管理公司云计算 编辑:程序博客网 时间:2024/05/30 23:11

构造与析构调用顺序:

#include <stdio.h>class Test9_1{public:    Test9_1 (int a)    {        m_a = a;        printf ("9_1 1111111111111111111构造函数....a: %d\n", a);    }    // 析构的顺序和构造的顺序相反,先构造的后析构    ~Test9_1()    {        printf ("9_1 1111111111111111111析构函数....a: %d\n", m_a);    }private:    int m_a;};// 对象初始化列表,解决一个类中有另一个没有无参构造的类的对象的初始化class Test9_2{public:    // 对象初始化列表,在构造函数后面加:,后面加上要初始化的对象    // 对象初始化列表要比当前类的构造函数先执行    // 对象的初始化先后顺序和 在对象初始化列表 的顺序无关,和在类中的声明先后顺序有关     Test9_2():m_a(10), m_c(30), m_b(20), m_ca(100)    {        printf ("9_2 222222222222构造函数....\n");    }    ~Test9_2()    {        printf ("9_2 222222222222构造函数....a: %d\n", m_ca);    }private:    Test9_1 m_b;    Test9_1 m_c;    Test9_1 m_a;    const int m_ca;};int main9_1(){    // 类中有了构造函数以后,就没有默认的无参构造    // Test9_1 a;    Test9_2 a;    return 0;}

以及构造中调用构造:

#include <stdio.h>class Test10_1{public:    // 构造函数中调用构造函数 不会达到预期的效果的    Test10_1(int a, int b)    {        m_a = a;        m_b = b;        Test10_1(a, b, 30);  // 匿名对象、临时对象    }    Test10_1 (int a, int b, int c)    {        m_a = a;        m_b = b;        m_c = c;    }    ~Test10_1()    {        printf ("析构*******a = %d, b = %d, c = %d\n", m_a, m_b, m_c);    }    void print ()    {        printf ("a = %d, b = %d, c = %d\n", m_a, m_b, m_c);    }private:    int m_a;    int m_b;    int m_c;};int main10_1(){    // Test10_1(10,20);  // 临时对象 生命周期就是这一行    Test10_1 a(10,20);    a.print();    printf ("--------------------------------\n");    return 0;}