類繼承

在面向對象編程中一個最重要的概念就是繼承。繼承允許我們在另一個類,這使得它更容易創建和維護一個應用程序來定義一個類。這也提供了一個機會重用代碼的功能和快速的實施時間。

當創建一個類,而不是完全寫入新的數據成員和成員函數,程序員可以指定新的類要繼承現有類的成員。這個現有的類稱爲基類,新類稱爲派生類。

繼承的想法實現是有關係的。例如,哺乳動物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