位置:首頁 > 高級語言 > D語言教學 > D語言類和對象

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,它指向的對象本身。
指針指向類 一個指針,指向類完成完全相同的方式指向一個結構。其實一個類實際上隻是一個帶有功能結構。
類的靜態成員 這兩個數據成員和類的成員函數可以被聲明為靜態。