构造函数负责完成程序中的初始化工作,而析构函数负责完成程序中的清理工作。
如果用户没有定义构造函数和析构函数,会自动生成一个默认的构造函数和析构函数。
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);
在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数。对象释放时,先执行派生类的析构函数,再执行基类的析构函数。