レッスン52 .C ++抽象クラスとインタフェース

1.何が抽象クラスであります

。現実世界の抽象表現するために使用さ
bは。唯一の定義型ですが、クラスのオブジェクトを生成することはできません
Cを。唯一の継承可能な相関関数を書き換えている(あなたができる、唯一の継承に、オブジェクトを作成できません。 )ポインタを定義するために使用される
直接請求D. 相関関数は、完全な実装をしません

純粋仮想関数を持つ2.抽象クラス

a.c ++言語は、抽象クラスの概念がありません
純粋に抽象クラスの仮想関数によって達成b.c ++
、Cを。純粋仮想関数のみプロトタイプメンバ関数のために定義される
D。C ++クラスの純粋仮想関数がこのクラスになった存在である限り、抽象クラス
など。

純粋仮想関数の構文規則:

class Shape
{
public:
    virtaul double area () = 0;
};
//这里" = 0"用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体

例えば:

#include <iostream>
#include <string>

using namespace std;

class Shape
{
public:
    virtual double area () = 0;
};

class Rect : public Shape
{
    int ma;
    int mb;
public:
    Rect (int a, int b)
    {
        ma = a;
        mb = b;
    }
    
    double area ()
    {
        return ma * mb;
    }
};

class Circle : public Shape
{
    int mr;
public:
    Circle (int r)
    {
        mr = r;
    }
    
    double area ()
    {
        return 3.14 * mr * mr;
    }
};

void area (Shape* p)            // 抽象类可以定义指针
{
    double r = p->area();       // Shape的纯虚函数,没有实现。但这里调用的是子类中实现的虚函数
                                // 因为子类中实现了父类中的纯虚函数,所以这里才能调用
    cout << "r = " << r << endl;
}

int main()
{
    Rect rect (1, 2);
    Circle circle(10);
    
    area(&rect);
    area(&circle);
    
    return 0;   
}

3.インタフェース

クラスは、変数の任意のメンバー定義していません
Bを。すべてのメンバ関数が公開され
、C。すべてのメンバ関数、純粋仮想関数がされている
日間。インターフェイス抽象クラスは特別です

例えば:

class Channel
{
public:
    virtual bool open () = 0;
    virtual void close () = 0;
    virtual bool send (char* buf, int len) = 0;
    virtual int receive (char* buf, int len); = 0;
};

おすすめ

転載: www.cnblogs.com/huangdengtao/p/11985385.html