1. 虛函數和純虛函數能夠定義在同一個類(class)中,含有純虛函數的類被稱爲抽象類(abstract class),而只含有虛函數的類(class)不能被稱爲抽象類(abstract class)。函數
2. 虛函數能夠被直接使用,也能夠被子類(sub class)重載之後以多態的形式調用,而純虛函數必須在子類(sub class)中實現該函數才能夠使用,由於純虛函數在基類(base class)
只有聲明而沒有定義。this
3. 虛函數和純虛函數均可以在子類(sub class)中被重載,以多態的形式被調用。spa
4. 虛函數和純虛函數一般存在於抽象基類(abstract base class -ABC)之中,被繼承的子類重載,目的是提供一個統一的接口。繼承
5. 虛函數的定義形式:virtual {method body}
純虛函數的定義形式:virtual { } = 0;
在虛函數和純虛函數的定義中不能有static標識符,緣由很簡單,被static修飾的函數在編譯時候要求前期bind,然而虛函數倒是動態綁定(run-time bind),並且被二者修飾的函數生命週期(life recycle)也不同。
6. 若是一個類中含有純虛函數,那麼任何試圖對該類進行實例化的語句都將致使錯誤的產生,由於抽象基類(ABC)是不能被直接調用的。必須被子類繼承重載之後,根據要求調用其子類的方法。接口
如下爲一個簡單的虛函數和純虛寒數的使用演示,目的是拋磚引玉!
#include
//father class
class Virtualbase
{
public:
virtual void Demon()= 0; //prue virtual function
virtual void Base() {cout<<"this is farther class"<};
//sub class
class SubVirtual :public Virtualbase
{
public:
void Demon() { cout<<" this is SubVirtual!"< void Base() {
cout<<"this is subclass Base"<};
/* instance class and sample */
void main()
{
Virtualbase* inst = new SubVirtual(); //multstate pointer
inst->Demon();
inst->Base();
// inst = new Virtualbase();
// inst->Base()
return ;
}生命週期