介面描述了類的行為和功能,而不需要完成類的特定實作,
C++ 介面是使用抽象類來實作的,抽象類與資料抽象互不混淆,資料抽象是一個把實作細節與相關的資料分離開的概念,

如果類中至少有一個函式被宣告為純虛函式,則這個類就是抽象類,純虛函式是通過在宣告中使用 “= 0” 來指定的,如下所示:
class Box { public: // 純虛函式 virtual double getVolume() = 0; private: double length; // 長度 double breadth; // 寬度 double height; // 高度 };
設計抽象類(通常稱為 ABC)的目的,是為了給其他類提供一個可以繼承的適當的基類,抽象類不能被用于實體化物件,它只能作為介面使用,如果試圖實體化一個抽象類的物件,會導致編譯錯誤,
因此,如果一個 ABC 的子類需要被實體化,則必須實作每個虛函式,這也意味著 C++ 支持使用 ABC 宣告介面,如果沒有在派生類中重寫純虛函式,就嘗試實體化該類的物件,會導致編譯錯誤,
可用于實體化物件的類被稱為具體類,

抽象類的實體
請看下面的實體,基類 Shape 提供了一個介面 getArea(),在兩個派生類 Rectangle 和 Triangle 中分別實作了 getArea():
實體
#include <iostream> using namespace std; // 基類
class Shape { public:
// 提供介面框架的純虛函式 virtual int getArea() = 0; void setWidth(int w) { width = w; }
void setHeight(int h) { height = h; } protected: int width; int height; };
// 派生類 class Rectangle: public Shape { public: int getArea() { return (width * height); } };
class Triangle: public Shape { public: int getArea() { return (width * height)/2; } };
int main(void) { Rectangle Rect; Triangle Tri; Rect.setWidth(5); Rect.setHeight(7);
// 輸出物件的面積 cout << "Total Rectangle area: " << Rect.getArea() << endl; Tri.setWidth(5);
Tri.setHeight(7); // 輸出物件的面積 cout << "Total Triangle area: " << Tri.getArea() << endl; return 0; }
當上面的代碼被編譯和執行時,它會產生下列結果:
如果你也想成為程式員,想要快速掌握編程,趕緊關注小編加入學習企鵝圈子吧!
里面有資深專業軟體開發工程師,在線解答你的所有疑惑~編程語言入門“so easy”
資料包含:編程入門、游戲編程、課程設計等,
免費學習書籍:

免費學習資料:


Total Rectangle area: 35 Total Triangle area: 17
從上面的例中,我們可以看到一個抽象類是如何定義一個介面 getArea(),兩個派生類是如何通過不同的計算面積的演算法來實作這個相同的函式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/245495.html
標籤:C++
上一篇:c語言程式設計
