鍍金池/ 教程/ C/ 接口 (抽象類)
動態(tài)內(nèi)存
類和對象
接口 (抽象類)
結(jié)構(gòu)體
循環(huán)的類型
函數(shù)
數(shù)字
日期和時間
基本語法
多態(tài)
數(shù)據(jù)抽象
注釋
命名空間
字符串
預(yù)處理器
決策語句
修飾符的類型
鍙橀噺綾誨瀷
基本輸入輸出
操作符
數(shù)組
模板
多線程
繼承
Web 編程
信號處理
指針
存儲類型
概述
引用
常量
異常處理
開發(fā)環(huán)境
重載
變量作用域
數(shù)據(jù)類型
數(shù)據(jù)封裝
文件和流

接口 (抽象類)

接口可以用來描述一個 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) 的目的是提供一個適當?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)中。

上一篇:基本語法下一篇:注釋