c++虛函數和抽象類

虛函數是c++實現多態的一種機制,基類的虛函數可以有子類的函數重新定義,從而實現函數功能的靈活性。

虛函數又分爲:普通虛函數和純虛函數。

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

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

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

 

抽象類

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

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

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

    抽象類只能作爲基類來使用,其純虛函數的實現由派生類給出。如果派生類沒有重新定義純虛函數,而派生類只是繼承基類的純虛函數,則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛函數的實現,則該派生類就不再是抽象類了,它是一個可以建立對象的具體類了。 
   在有些情況下不想把基類置爲抽象類,增加子類功能的靈活性,使用純虛函數就不夠方便了,可以使用普通虛函數而把方法體置空,格式如下:

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

這樣子類就可以選擇性的重定義函數體,同時也保證了類本身不是抽象類,增加靈活性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章