C++虚函数和纯虚函数的区别
1.虛函數(shù)和純虛函數(shù)可以定義在同一個類中,含有純虛函數(shù)的類被稱為抽象類,而只含有虛函數(shù)的類不能被稱為抽象類。
2.虛函數(shù)可以被直接使用,也可以被子類重載以后,以多態(tài)的形式調(diào)用,而純虛函數(shù)必須在子類中實現(xiàn)該函數(shù)才可以使用,因為純虛函數(shù)在基類有聲明而沒有定義。
3.虛函數(shù)和純虛函數(shù)都可以在子類中被重載,以多態(tài)的形式被調(diào)用。
4.虛函數(shù)和純虛函數(shù)通常存在于抽象基類之中,被繼承的子類重載,目的是提供一個統(tǒng)一的接口。
5.虛函數(shù)的定義形式:virtual{};純虛函數(shù)的定義形式:virtual? { } = 0;在虛函數(shù)和純虛函數(shù)的定義中不能有static標識符,原因很簡單,被static修飾的函數(shù)在編譯時要求前期綁定,然而虛函數(shù)卻是動態(tài)綁定,而且被兩者修飾的函數(shù)生命周期也不一樣。
虛函數(shù)充分體現(xiàn)了面向?qū)ο笏枷胫械睦^承和多態(tài)性這兩大特性,在C++語言里應用極廣。比如在微軟的MFC類庫中,你會發(fā)現(xiàn)很多函數(shù)都有virtual關鍵字,也就是說,它們都是虛函數(shù)。難怪有人甚至稱虛函數(shù)是C++語言的精髓。
定義純虛函數(shù)就是為了讓基類不可實例化,因為實例化這樣的抽象數(shù)據(jù)結構本身并沒有意義或者給出實現(xiàn)也沒有意義。
純虛函數(shù)只是一個接口,是個函數(shù)的聲明而已,它要留到子類里去實現(xiàn)。
虛函數(shù)在子類里面也可以不重載的;但純虛必須在子類去實現(xiàn),這就像Java的接口一樣。通常我們把很多函數(shù)加上virtual,是一個好的習慣,雖然犧牲了一些性能,但是增加了面向?qū)ο蟮亩鄳B(tài)性,因為你很難預料到父類里面的這個函數(shù)不在子類里面不去修改它的實現(xiàn)
總結
以上是生活随笔為你收集整理的C++虚函数和纯虚函数的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 虚函数与纯虚函数
- 下一篇: C++的精髓——虚函数