C++类的构造函数和析构函数(附带实例)
C++ 中的构造函数和析构函数是类定义中两个比较特殊的成员函数,它们都没有返回值。构造函数名和类名相同,析构函数名则是在类名前加上“~”符号。
C++ 中,类的构造函数如下:
构造函数也可以具有参数,通过参数完成初始化操作。例如:
使用析构函数时,有如下注意事项:
注意,通常情况下不必定义析构函数,使用编译器默认生成的析构函数即可。但如果类中使用 new 关键字申请了动态分配内存,则必须显式地定义一个析构函数,以释放此空间。
构造函数和析构函数的调用起止点如下:
【实例】析构函数的使用。
1) 在头文件 Person.h 中声明和定义 CPerson 类,程序代码如下:
2) 在主程序文件中实现类对象的调用,程序代码如下:
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++析构函数
构造函数用于创建对象时为数据成员赋值,目的是初始化对象。析构函数的功能则相反,在对象删除前起资源清理作用。使用析构函数时,有如下注意事项:
- 一个类中只能定义一个析构函数,且不支持重载;
- 析构函数无参数值和返回值,不能使用 return 语句,也不用加上关键字 void;
- 若类中未显式定义析构函数,编译器会默认生成一个析构函数;
- 析构函数由编译器在对象声明周期结束时自动调用。
注意,通常情况下不必定义析构函数,使用编译器默认生成的析构函数即可。但如果类中使用 new 关键字申请了动态分配内存,则必须显式地定义一个析构函数,以释放此空间。
构造函数和析构函数的调用起止点如下:
- 自动变量:作用域是某个块,进入该块时调用构造函数,退出该块时调用析构函数;
- 全局变量:进入 main() 函数前调用构造函数,程序终止时调用析构函数;
- 动态分配对象:使用 new 关键字动态分配内存时调用构造函数,使用 delete 关键字删除动态分配内存时调用析构函数;
- 临时变量:编译器为支持计算自动产生的变量,其生存期的开始和结束点会调用构造函数和析构函数。
【实例】析构函数的使用。
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
****
ICP备案:
公安联网备案: