举个小例子:
有以下Date类:
class Date
{
public:
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
如果要使用该Date类创建对象,必须通过Init公有方法给对象设置日期,否则成员变量都是随机值,
但每次创建对象时都调用该方法,这未免有点麻烦,那能否在对象创建的同时,就将信息设置进去呢?
为解决以上问题,C++中引入了构造函数:构造函数用于对象的初始化,在实例化对象时由编译器自动调用,保证了对象创建出来一定完成了初始化。虽然构造函数叫做构造,但构造函数并不用来开空间创建对象,而是用来初始化对象的。(也许构造函数更适合被称为初始化函数?)
想要更深入的了解析构函数,可以看看博主的文章: C++ 类和对象篇(四) 构造函数
四、析构函数
1. 析构函数是什么?
析构函数是一个特殊的成员函数,用来释放对象使用的资源( 如关闭文件、释放内存等**)。**
2. 为什么要有析构函数?
如何释放对象申请的系统资源?忘记释放怎么办?能不能在销毁对象时自动释放?
cpp复制代码
举个小例子:
class Test
{
public:
//构造函数
Test()
{
_arr = (char*)malloc(1024*1024*1024);//申请1G空间
}
//销毁函数:用于释放资源
void Destory()
{
free(_arr);
}
private:
char* _arr;
};
int main()
{
Test* t = new Test;//在堆上创建一个对象
delete t;//销毁一个对象
while (1) {}
return 0;
}
如果要销毁Test对象,必须先使用Destory公有方法来释放资源,否则会造成内存泄漏,
这未免有点麻烦,而且容易忘记,那能否在对象销毁的同时释放资源呢?
class A
{
public:
A(int a)
{
num = a;
}
int max(A b)
{
return num > b.num;
}
int operator> (A b)
{
return num > b.num;
}
private:
int num;
};
int main()
{
A a(10);
A b(20);
//如果不使用运算符重载,只能编写函数来比较两个对象的大小
cout << a.max(b) << endl;
//使用运算符重载
cout << (a > b) << endl;
return 0;
}