C++——构造函数与析构函数的恩怨情仇
作者:互联网
构造函数
在类的实例进入其作用域时,也就是建立一个对象,构造函数就会被调用,那么构造函数的作用是什么呢?当建立一个对象时,常常需要做某些初始化的工作,例如对数据成员进行赋值设置类的属性,而这些操作刚好放在构造函数中完成。
类的构造方法如下:
class Person
{
public:
Person(); //构造函数
int index;
int getIndex();
};
Persn::Person()
{
index = 10;
}
Person()是默认构造函数,如果不显式地写上函数的声明也可以。
构造函数是可以有参数的,修改上面的代码,使其构造函数带有参数。例如:
class Person
{
public:
Person(int Index); //构造函数
int index;
int setIndex(int Index);
};
Person::Person(int Index)
{
index = Index;
}
下面来个例子:
#include<iostream>
using namespace std;
class Person
{
public:
Person();
Person(int iIndex,short m_shAge,double m_dSalary);
int m_iIndex;
short m_shAge;
double m_dSalary;
int getIndex();
short getAge();
double getSalary();
};
Person::Person()
{
m_iIndex = 0;
m_shAge = 10;
m_dSalary = 100;
}
Person::Person(int iIndex,short m_shAge,double m_dSalary)
{
m_iIndex = iIndex;
m_shAge = m_shAge;
m_dSalary = m_dSalary;
}
int Person::getIndex()
{
return m_iIndex;
}
int main()
{
Person p1;
cout << "m_iIndex is:" << p1.getIndex() << endl;
Person p2(1,20,1000);
cout << "m_iIndex is:" << p2.getIndex() << endl;
return 0;
}
结果:
程序声明了两个对象p1和p2,p1使用默认构造函数初始化成员变量,p2使用带参数的构造函数初始化,所以在调用同一个类成员函数getIndex时输出结果不同。
析构函数
构造函数和析构函数是类体定义中比较特殊的两个成员函数,因为他们两个都没有返回值,而且构造函数名标识符和类名标识符相同,而析构函数名标识符就是在类名标识符前面加上“~”符号。
构造函数主要是用来在对象创建时,给对象中的一些数据成员赋值,主要目的就是用来初始化对象。析构函数的功能是用来释放一个对象,在对象删除前,用它来做一些清理的工作,它与构造函数的功能正好相反。
代码:
#include<iostream>
#include<string.h>
using namespace std;
class Person
{
public:
Person();
~Person();
char *m_pMessage;
void showStartMessage();
void showFrameMessage();
};
Person::Person()
{
m_pMessage = new char[100];
}
void Person::showStartMessage()
{
strcpy(m_pMessage,"I'm Johnson666");
cout << m_pMessage << endl;
}
void Person::showFrameMessage()
{
strcpy(m_pMessage,"**************");
cout << m_pMessage <<endl;
}
Person::~Person()
{
delete[] m_pMessage;
}
int main()
{
Person p1;
p1.showFrameMessage();
p1.showStartMessage();
p1.showFrameMessage();
return 0;
}
结果:
程序在构造函数中使用new为成员m_pMessage分配空间,在析构函数中使用delete释放由new分配的空间。成员m_pMessage为字符指针,在showStartMessage成员函数中输出字符指针所指向的内容。
使用析构函数的注意事项:
1.一个类中只可能定义一个析构函数。
2.析构函数不能重载。
3.构造函数和析构函数不能使用return语句返回值。不用加上关键字void,加上反而会报错。
构造函数和析构函数的调用环境:
1.自动变量的作用域是某个模块,当此模块被激活时,自动变量调用构造函数,当退出此模块时,会调用析构函数。
2.全局变量在进入main函数之前会调用构造函数,在程序终止时会调用析构函数。
3.动态分配的对象在使用new为对象分配内存时会调用构造函数;使用delete删除对象时会调用析构函数。
4.临时变量是为支持计算,由编译器自动产生的。临时变量的生存期的开始和结尾会调用构造函数和析构函数。
标签:调用,函数,int,与析构,情仇,Person,析构,构造函数 来源: https://blog.csdn.net/weixin_50464560/article/details/117093334