首页 > 编程笔记 > C++笔记 阅读:6

C++类的构造函数和析构函数(附带实例)

C++ 中的构造函数和析构函数是类定义中两个比较特殊的成员函数,它们都没有返回值。构造函数名和类名相同,析构函数名则是在类名前加上“~”符号。

C++构造函数

为类建立对象时,需要调用构造函数,这是因为建立对象时需要对其初始化,如为成员变量赋值、设置类的属性等,这些操作需要在构造函数中完成。

C++ 中,类的构造函数如下:
class CPerson  // 定义 CPerson 类
{
public:
    CPerson();  // 声明构造函数 CPerson(),函数名与类名相同
    int m_iIndex;
    int getIndex();
};

// 定义构造函数,此为系统默认构造函数
CPerson::CPerson()
{
    m_iIndex = 10;
}
CPerson() 是系统默认的 CPerson 类的构造函数,因此可以不写函数声明语句。

构造函数也可以具有参数,通过参数完成初始化操作。例如:
CPerson::CPerson(int iIndex)
{
    m_iIndex = iIndex;
}

C++析构函数

构造函数用于创建对象时为数据成员赋值,目的是初始化对象。析构函数的功能则相反,在对象删除前起资源清理作用。

使用析构函数时,有如下注意事项:
注意,通常情况下不必定义析构函数,使用编译器默认生成的析构函数即可。但如果类中使用 new 关键字申请了动态分配内存,则必须显式地定义一个析构函数,以释放此空间。

构造函数和析构函数的调用起止点如下:
【实例】析构函数的使用。
1) 在头文件 Person.h 中声明和定义 CPerson 类,程序代码如下:
#include <iostream>
#include <string.h>
using namespace std;

class CPerson //定义 CPerson 类
{
public:
    CPerson(); //声明构造函数
    ~CPerson(); //声明析构函数
    char *m_pMessage;
    void ShowStartMessage();
    void ShowFrameMessage();
};

CPerson::CPerson() //构造函数CPerson(),使用 new动态分配一块内存
{
    m_pMessage = new char[2048];
}

void CPerson::ShowStartMessage() //成员函数 ShowStartMessage()
{
    strcpy(m_pMessage, "Welcome to MR");
    cout << m_pMessage << endl;
}

void CPerson::ShowFrameMessage() //成员函数ShowFrameMessage()
{
    strcpy(m_pMessage, "****");
    cout << m_pMessage << endl;
}

CPerson::~CPerson() //析构函数~CPerson(),使用 delete 释放动态分配的内存空间
{
    delete[] m_pMessage;
}

2) 在主程序文件中实现类对象的调用,程序代码如下:
#include <iostream>
using namespace std;
#include "Person.h"

int main()
{
    CPerson p;
    p.ShowFrameMessage();
    p.ShowStartMessage();
    p.ShowFrameMessage();

    // 定义对象 p
}
程序运行结果为:

****
Welcome to MR
****

构造函数中使用 new 关键字为成员 m_pMessage 分配了一块动态空间;在析构函数中使用 delete 释放由 new 分配的内存空间。成员 m_pMessage 为字符指针,在 ShowStartMessage() 成员函数中输出字符指针指向的内容。

相关文章