建構函式和解構函式


類別建構函式:

一個類別建構函式是每當我們建立一個類的新物件時執行的類的一個特殊的成員函式。

建構函式將有完全相同於類的名稱,它不具有任何返回型別可言,甚至不是void。建構函式可以是非常有用的為某些成員變數設定初始值。

下面的例子說明了建構函式的概念:

import std.stdio;

class Line
{
   public:
      void setLength( double len )
      {
        length = len;
      }

      double getLength()
      {
         return length;
      }
      this()
      {
         writeln("Object is being created");
      }

   private:
      double length;
}

void main( )
{
   Line line = new Line();

   // set line length
   line.setLength(6.0);
   writeln("Length of line : " , line.getLength());
}

當上面的程式碼被編譯並執行,它會產生以下結果:

Object is being created
Length of line : 6

引數化建構函式:

預設建構函式沒有任何引數,但如果需要,建構函式可以有引數。這可以幫助您在其建立為顯示在下面的例子中,初始值分配給某個物件時:

import std.stdio;

class Line
{
   public:
      void setLength( double len )
      {
         length = len;
      }

      double getLength()
      {
         return length;
      }
      this( double len)
      {
         writeln("Object is being created, length = " , len );
         length = len;
      }

   private:
      double length;
}

// Main function for the program
void main( )
{
   Line line = new Line(10.0);

   // get initially set length.
   writeln("Length of line : ",line.getLength());
   // set line length again
   line.setLength(6.0);
   writeln("Length of line : ", line.getLength());

}

當上面的程式碼被編譯並執行,它會產生以下結果:

Object is being created, length = 10
Length of line : 10
Length of line : 6

類的解構函式:

解構函式執行時,類的一個物件超出範圍或當delete表示式應用到一個指標,指向該類的物件類的一個特殊成員函式。

解構函式將有完全相同的名稱作為類的字首與符號(?),它可以既不返回一個值,也不能帶任何引數。解構函式可以是走出來的程式如關閉檔案,釋放記憶體等前釋放資源非常有用的

下面的例子說明了解構函式的概念:

import std.stdio;

class Line
{
   public:
      this()
      {
         writeln("Object is being created");
      }
      ~this()
      {
         writeln("Object is being deleted");
      }

      void setLength( double len )
      {
         length = len;
      }

      double getLength()
      {
         return length;
      }
   private:
      double length;
}


// Main function for the program
void main( )
{
   Line line = new Line();

   // set line length
   line.setLength(6.0);
   writeln("Length of line : ", line.getLength());

}

當上面的程式碼被編譯並執行,它會產生以下結果:

Object is being created
Length of line : 6
Object is being deleted