构造函数负责完成程序中的初始化工作,而析构函数负责完成程序中的清理工作。
如果用户没有定义构造函数和析构函数,会自动生成一个默认的构造函数和析构函数。
1、构造函数
构造函数(constructor)是与类名相同 的,在建立对象时自动调用的函数,专门用于对象初始化的函数。
在需要为对象数据成员动态分配内存时,构造函数总与new运算符一起使用在创建对象的语句中。
(1)构造函数的命名必须和类名完全相同。
(2)构造函数的功能主要用于在类的对象创建时定义初始化的状态,它没有返回值,也不能用void来修饰。
(3)它不能被直接调用,必须在创建对象时才会由编译器自动调用。
C#实例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 构造函数
{
class Employee
{
private string _name;
private char _gender;
private string _qualification;
private uint _salary;
//默认构造函数
public Employee()
{
_qualification = "研究生";
}
//调用默认构造函数
static void Main(string[] args)
{
Employee objEmployee = new Employee();
Console.WriteLine("资格=" + objEmployee._qualification);
Console.WriteLine("薪水=" + objEmployee._salary);
}
}
}
2、析构函数
析构函数(destructor)也叫拆构函数,是在对象消失之前的瞬间自动调用的函数,其形式是:
~构造函数名();
(1)析构函数名在类名前加上一个”~“,与构造函数对比区别。
(2)析构函数没有任何参数,不能被重载,但可以是虚函数,一个类只有一个析构函数。
(3)析构函数没有返回值。
C++实例:
/********************************
* 功能:构造函数与析构函数 *
********************************/
#include<iostream>
using namespace std;
class Clock{
private:
int H,M,S;
public:
Clock(int h=0,int m=0,int s=0) //构造函数
{
H=h,M=m,S=s;
cout<<"constructor:"<<H<<":"<<M<<":"<<S<<endl;
}
~Clock() //析构函数
{
cout<<"destructor:"<<H<<":"<<M<<":"<<S<<endl;
}
};
int main()
{
Clock C3(10,0,0);
Clock C4(11,0,0);
return 0;
}
Clock C1(8,0,0);
Clock C2(9,0,0);
在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数。对象释放时,先执行派生类的析构函数,再执行基类的析构函数。