接口 (抽象類)

2018-08-12 22:03 更新

接口 (抽象類)

接口可以用來描述一個 C++ 類的行為或功能,但是并不需要對這個類進行實現(xiàn)。

C++ 接口是通過抽象類來實現(xiàn)的,這些抽象類不應(yīng)與數(shù)據(jù)抽象混淆,數(shù)據(jù)抽象的概念:概念結(jié)構(gòu)是對現(xiàn)實世界的一種抽象,從實際的人、物、事和概念中抽取所關(guān)心的共同特性,忽略非本質(zhì)的細節(jié),把這些特性用各種概念精確地加以描述,這些概念組成了某種模型。

一個抽象類的聲明里至少要有一個函數(shù)作為純虛函數(shù)。在函數(shù)形參表后面寫上 “= 0” 以指定純虛函數(shù):

    class Box
    { 
       public:
      // pure virtual function
      virtual double getVolume() = 0;
       private:
      double length;  // Length of a box
      double breadth; // Breadth of a box
      double height;  // Height of a box
    };

建立抽象類 (通常被稱為一個ABC) 的目的是提供一個適當(dāng)?shù)牟⑶移渌惪梢岳^承的基類。抽象類不能實例化對象并且只能作為一個接口使用。試圖實例化一個抽象類的對象會導(dǎo)致編譯錯誤。

因此,如果一個抽象類的子類的需要實例化,它必須實現(xiàn)所有的虛函數(shù),這意味著它支持抽象類的接口聲明。如果在派生類中未能覆蓋一個純虛函數(shù),然后試圖實例化該類的對象,會導(dǎo)致一個編譯錯誤。

可用于實例化對象的類被稱為具體類。

抽象類樣例

考慮下面的例子,父類為基類提供了一個接口來實現(xiàn)函數(shù) getArea()

    #include <iostream>

    using namespace std;

    // Base class
    class Shape 
    {
    public:
       // pure virtual function providing interface framework.
       virtual int getArea() = 0;
       void setWidth(int w)
       {
      width = w;
       }
       void setHeight(int h)
       {
      height = h;
       }
    protected:
       int width;
       int height;
    };

    // Derived classes
    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);
       // Print the area of the object.
       cout << "Total Rectangle area: " << Rect.getArea() << endl;

       Tri.setWidth(5);
       Tri.setHeight(7);
       // Print the area of the object.
       cout << "Total Triangle area: " << Tri.getArea() << endl; 

       return 0;
    }

上面的代碼編譯和執(zhí)行后,將產(chǎn)生以下結(jié)果:

    Total Rectangle area: 35
    Total Triangle area: 17

設(shè)計策略

一個面向?qū)ο蟮南到y(tǒng)可能使用一個抽象基類提供一個普遍的和適合所有的外部應(yīng)用程序的標準化接口。然后, 通過繼承的抽象基類, 形成派生類。

功能(即,公共函數(shù)),即由外部應(yīng)用程序提供的,作為抽象基類里面的純虛函數(shù)。 那些純虛函數(shù)是由派生類實現(xiàn)的,派生類對應(yīng)于應(yīng)用的特定類型。

即使在系統(tǒng)已經(jīng)定義之后, 這種架構(gòu)還允許添加新的應(yīng)用程序到系統(tǒng)中。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號