面向对象——(3)构造函数与析构函数

    构造函数负责完成程序中的初始化工作,而析构函数负责完成程序中的清理工作

    如果用户没有定义构造函数和析构函数,会自动生成一个默认的构造函数和析构函数。

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);


运行结果:




       在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数。对象释放时,先执行派生类的析构函数,再执行基类的析构函数。

原文地址:https://www.cnblogs.com/saixing/p/6730361.html