C++的构造函数和析构函数

来源:互联网 发布:ff14大数据 编辑:程序博客网 时间:2024/06/14 08:24

(一)构造函数:(分为有参数和无参数两种)
a:定义:
1)C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数;
2)构造函数在定义时可以有参数;
3)没有任何返回类型的声明。

b:作用:完成对参数的初始化
构造函数建立例子:

class Test  //定义一个类{public:    Test()  //无参数构造函数    {        //完成对属性的初始化工作        a = 10;        p = (char *)malloc(100);        strcpy(p, "aaaaafff");    }    Test(int m_a,int m_b)   //有参数构造函数    {        a = m_a+m_b;    }    //赋值构造函数(copy构造函数)    Test2(const Test2& obj)    {        cout << "我也是构造函数" << endl;    }private:    int a;    char *p;};

c: 调用方法(一般C++编译器会自动调用,也可人工调用):
1)无参数构造函数的调用

class Test2 //定义一个类{public:    Test2()  //定义一个无参数构造函数    {        m_a = 0;        m_b = 0;        cout << "无参数构造函数" << endl;    }public:    void printT()    {        cout << m_a << endl;        cout << m_b << endl;    }private:    int m_a;    int m_b;};void main(){    Test2 t1;   //调用无参数构造函数    t1.printT();    system("pause");}

2)有参数构造函数的三种调用方式
1,第一种调用方法

class Test2 //定义一个类{public:    Test2(int a)  //定义一个带一个参数的构造函数    {        m_a = a;        m_b = 0;    }public:    void printT()    {        cout << m_a << endl;        cout << m_b << endl;    }private:    int m_a;    int m_b;};void main(){    //Test2 t2 = 4;  //这两个写法是一样的效果,都是对的    Test2 t2 = (3,4);       //构造函数只有一个参数是会把这个当做一个逗号表达式,取最后一个数的值    t2.printT();    system("pause");}

2,第二种调用方法(较常用的)

class Test2 //定义一个类{public:    Test2(int a,int b)    {        m_a = a;        m_b = b;        cout << "有参数构造函数" << endl;    }public:    void printT()    {        cout << m_a << endl;        cout << m_b << endl;    }private:    int m_a;    int m_b;};void main(){    Test2 t1(1,2);    t1.printT();    system("pause");}

3,第三种调用方法(手动调用构造函数)

class Test2 //定义一个类{public:    Test2(int a,int b)    {        m_a = a;        m_b = b;        cout << "有参数构造函数" << endl;    }public:    void printT()    {        cout << m_a << endl;        cout << m_b << endl;    }private:    int m_a;    int m_b;};void main(){    //直接调用有参构造函数完成t4的初始化(只调用了一次构造函数)    Test2 t4 = Test2(1, 2);   //手工调用了匿名对象    t4.printT();    //t1 = t4; //把t4 copy给t1  //赋值操作,与上面的不是一回事    //对象的初始化和对象的赋值是不同的概念    system("pause");}

d,构造函数的规则
1)当类中没有定义任何一个构造函数时,c++编译器会提供默认无参构造函数和默认拷贝构造函数
2)当类中定义了拷贝构造函数时,c++编译器不会提供无参数构造函数
3) 当类中定义了任意的非拷贝构造函数(即:当类中提供了有参构造函数或无参构造函数),c++编译器不会提供默认无参构造函数
4 )默认拷贝构造函数成员变量简单赋值
总结:只要你写了构造函数,那么你必须用。

(二)析构函数
a:析构函数定义及调用
1)C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数
语法:~ClassName()
2)析构函数没有参数也没有任何返回类型的声明
3)析构函数在对象销毁时自动被调用
4)析构函数调用机制
C++编译器自动调用

b:析构函数实例:

class Test{public:    Test()  //构造函数    {        //完成对属性的初始化工作        a = 10;        p = (char *)malloc(100);        strcpy(p, "aaaaafff");        cout << "我是构造函数,被执行了" << endl;    }    void printP()    {        cout << p << endl;        cout << a << endl;    }    ~Test()    //析构函数    {        if (p != NULL)        {            free(p);        }        cout << "我是析构函数,被调用了" << endl;    }private:    int a;    char *p;};

构造析构总结
1)构造函数是C++中用于初始化对象状态的特殊函数
2)构造函数在对象创建时自动被调用
3)构造函数和普通成员函数都遵循重载规则
4)拷贝构造函数是对象正确初始化的重要保证
5)必要的时候,必须手工编写拷贝构造函数

0 0
原创粉丝点击