2010-09-24 157 views

回答

0
  1. 虛函數具有函數體。

  2. 重載可以通過Vartual函數完成。

  3. 它被定義爲:virtual int runFun();

  1. 純Vartual功能對函數體。

  2. 重載是必須在Pure Vartual功能。

  3. 它被定義爲:virtual int runFun()= 0;

2

純虛函數是一個可以聲明如下:

class Foo { 
    virtual void bar() = 0; 
}; 

barFoo純虛擬成員。它沒有實現(因此= 0),並且不能被調用。從Foo繼承的任何類必須爲提供bar的實現。這是唯一的區別:父類沒有純虛擬的實現,所以派生類必須提供它。 (這是一個例外,但很少使用。)

否則,它的工作方式完全相同。鑑於:

class Baz : public Foo { 
    virtual void bar() {} 
}; 

Baz任何實例都可以與Foo*類型的指針進行訪問和Baz::bar將被調用。如果Foo::bar是純虛擬的,則不能實例化Foo,並且對Foo::bar的調用將會出錯。如果Foo::bar純,然後提供給Foo::bar實施,將被要求將呼籲Baz實例FooBaz::bar情況下,即使是通過Foo*

(純虛也可以實現,這樣,例如,Baz::bar可以調用Foo::bar,但這種情況並不常見。)