D語言類和物件


類是D程式設計的核心功能,它支援物件導向的程式設計和通常被稱為使用者定義的型別。

類是用來指定物件的形式,它結合了資料表示和操縱資料成一個整齊的包裝方法。類中的資料和函式被稱為類的成員。

D程式設計類的定義:

當定義一個類時,定義了一個資料型別。這實際上並不定義任何資料,但它並定義哪些類名表示,即是什麼類的物件將包括與哪些操作可以在這樣一個物件來執行。

類定義以關鍵字class後面的類名開頭和類體,由一對花括號括起來。類定義必須要麼跟一個分號或宣告的列表。例如,我們定義使用關鍵字class如下框資料型別:

class Box
{
   public:
      double length;   // Length of a box
      double breadth;  // Breadth of a box
      double height;   // Height of a box
}

關鍵字public確定類跟在它後面的成員的存取屬性。公共成員都可以從類的外部存取類物件的範圍內的任何地方。也可以指定一個類的成員為private或protected,我們將在一個分節討論。

定義D物件:

一類提供物件框架,所以基本上是一個物件從一個類建立的。我們宣告一個類的物件與排序完全相同的宣告我們宣告基本型別的變數。下面的語句宣告類Box的兩個物件:

Box Box1;          // Declare Box1 of type Box
Box Box2;          // Declare Box2 of type Box

兩個物件Box1和Box2都會有自己的資料成員的副本。

存取資料成員:

一個類的物件的公共資料成員可以使用直接成員存取運算子進行存取(.)讓我們試試下面的例子中,直觀清楚:

import std.stdio;

class Box
{
   public:
      double length;   // Length of a box
      double breadth;  // Breadth of a box
      double height;   // Height of a box
}

void main()
{
   Box box1 = new Box();    // Declare Box1 of type Box
   Box box2 = new Box();    // Declare Box2 of type Box
   double volume = 0.0;     // Store the volume of a box here

   // box 1 specification
   box1.height = 5.0;
   box1.length = 6.0;
   box1.breadth = 7.0;

   // box 2 specification
   box2.height = 10.0;
   box2.length = 12.0;
   box2.breadth = 13.0;

 // volume of box 1
   volume = box1.height * box1.length * box1.breadth;
   writeln("Volume of Box1 : ",volume);

   // volume of box 2
   volume = box2.height * box2.length * box2.breadth;
   writeln("Volume of Box2 : ", volume);
}

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

Volume of Box1 : 210
Volume of Box2 : 1560

要注意的是私有和受保護成員不能直接使用直接成員存取運算子(.)進行存取是重要的。我們將學習private和protected成員如何可以存取。

類和物件的詳細資訊:

到目前為止,已經得到了類和物件非常基本的概念。有相關的為D程式設計中類和物件,我們將在下面列出各個子部分進一步討論相關的概念:

Concept 描述
類成員函式 一個類的成員函式是一個函式,它有它的定義或像任何其他變數在類定義中它的原型。
類的存取修飾符 類成員可以被定義為public,private或protected。預設情況下,成員將被假定為private。
建構函式和解構函式 類別建構函式是在建立類的新物件時呼叫類中的特殊功能。解構函式也是一個特殊的功能,當建立的物件被刪除時呼叫。
this指標 每個物件都有一個特殊的指標this,它指向的物件本身。
指標指向類 一個指標,指向類完成完全相同的方式指向一個結構。其實一個類實際上只是一個帶有功能結構。
類的靜態成員 這兩個資料成員和類的成員函式可以被宣告為靜態。