抽象類與純虛函數


轉載 2010年08月20日 15:47:00

純虛函數是一種特殊的虛函數,它的一般格式如下:

    class <類名>
    {
        virtual <類型><函數名>(<參數表>)=0;
        …
    };

    在許多情況下,在基類中不能對虛函數給出有意義有實現,而把它說明爲純虛函數,它的實現留給該基類的派生類去做。這就是純虛函數的作用。下面給出一個純虛函數的例子。

    #include

    class point
    {
    public:
    point(int i=0, int j=0) { x0=i; y0=j; }
    virtual void set() = 0;
    virtual void draw() = 0;
    protected:
    int x0, y0;
    };

    class line : public point
    {
    public:
    line(int i=0, int j=0, int m=0, int n=0):point(i, j)
    {
        x1=m; y1=n;
    }
    void set() { cout<<"line::set() called./n"; }
    void draw() { cout<<"line::draw() called./n"; }
    protected:
    int x1, y1;
    };

    class ellipse : public point
    {
    public:
    ellipse(int i=0, int j=0, int p=0, int q=0):point(i, j)
    {
        x2=p; y2=q;
    }
    void set() { cout<<"ellipse::set() called./n"; }
    void draw() { cout<<"ellipse::draw() called./n"; }
    protected:
    int x2, y2;
    };

    void drawobj(point *p)
    {
    p->draw();
    }

    void setobj(point *p)
    {
    p->set();
    }

    void main()
    {
    line *lineobj = new line;
    ellipse *elliobj = new ellipse;
    drawobj(lineobj);
    drawobj(elliobj);
    cout<    setobj(lineobj);
    setobj(elliobj);
    cout<<"/nRedraw the object.../n";
    drawobj(lineobj);
    drawobj(elliobj);
    }

    抽象類

    帶有純虛函數的類稱爲抽象類。抽象類是一種特殊的類,它是爲了抽象和設計的目的而建立的,它處於繼承層次結構的較上層。抽象類是不能定義對象的,在實際中爲了強調一個類是抽象類,可將該類的構造函數說明爲保護的訪問控制權限。

    抽象類的主要作用是將有關的組織在一個繼承層次結構中,由它來爲它們提供一個公共的根,相關的子類是從這個根派生出來的。

    抽象類刻畫了一組子類的操作接口的通用語義,這些語義也傳給子類。一般而言,抽象類只描述這組子類共同的操作接口,而完整的實現留給子類。

    抽象類只能作爲基類來使用,其純虛函數的實現由派生類給出。如果派生類沒有重新定義純虛函數,而派生類只是繼承基類的純虛函數,則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛函數的實現,則該派生類就不再是抽象類了,它是一個可以建立對象的具體類了。

 

發佈了11 篇原創文章 · 獲贊 21 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章