類繼承


在物件導向程式設計中一個最重要的概念就是繼承。繼承允許我們在另一個類,這使得它更容易建立和維護一個應用程式來定義一個類。這也提供了一個機會重用程式碼的功能和快速的實施時間。

當建立一個類,而不是完全寫入新的資料成員和成員函式,程式員可以指定新的類要繼承現有類的成員。這個現有的類稱為基礎類別,新類稱為派生類。

繼承的想法實現是有關係的。例如,哺乳動物IS-A動物,狗,哺乳動物,因此狗IS-A動物,等等。

基礎類別和派生類:

一個類可以從多個類中派生的,這意味著它可以繼承資料和函式從多個基礎類別。要定義一個派生類中,我們使用一個類派生列表中指定的基礎類別(ES)。一個類派生列表名稱的一個或多個基礎類別和具有形式:

class derived-class: base-class

考慮一個基礎類別Shape和它的派生類Rectangle,如下所示:

import std.stdio;

// Base class
class Shape
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
}

// Derived class
class Rectangle: Shape
{
   public:
      int getArea()
      {
         return (width * height);
      }
}

void main()
{
   Rectangle Rect = new Rectangle();

   Rect.setWidth(5);
   Rect.setHeight(7);

   // Print the area of the object.
   writeln("Total area: ", Rect.getArea());

}

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

Total area: 35

存取控制和繼承:

派生類可以存取它的基礎類別的所有非私有成員。因此,基礎類別成員,不應該存取的派生類的成員函式應在基礎類別中宣告為private。

派生類繼承了所有基礎類別方法有以下例外:

  • 建構函式,解構函式和基礎類別的拷貝建構函式。

  • 基礎類別的過載運算子。

多層次繼承

繼承可以是多級的,如下面的例子。

import std.stdio;

// Base class
class Shape
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
}

// Derived class
class Rectangle: Shape
{
   public:
      int getArea()
      {
         return (width * height);
      }
}

class Square: Rectangle
{
   this(int side)
   {
      this.setWidth(side);
      this.setHeight(side);
   }
}

void main()
{
   Square square = new Square(13);

   // Print the area of the object.
   writeln("Total area: ", square.getArea());

}

讓我們編譯和執行上面的程式,這將產生以下結果:

Total area: 169