0
A
回答
0
虛函數具有函數體。
重載可以通過Vartual函數完成。
它被定義爲:virtual int runFun();
而
純Vartual功能對函數體。
重載是必須在Pure Vartual功能。
它被定義爲:virtual int runFun()= 0;
2
純虛函數是一個可以聲明如下:
class Foo {
virtual void bar() = 0;
};
bar
是Foo
純虛擬成員。它沒有實現(因此= 0
),並且不能被調用。從Foo
繼承的任何類必須爲提供bar
的實現。這是唯一的區別:父類沒有純虛擬的實現,所以派生類必須提供它。 (這是一個例外,但很少使用。)
否則,它的工作方式完全相同。鑑於:
class Baz : public Foo {
virtual void bar() {}
};
的Baz
任何實例都可以與Foo*
類型的指針進行訪問和Baz::bar
將被調用。如果Foo::bar
是純虛擬的,則不能實例化Foo
,並且對Foo::bar
的調用將會出錯。如果Foo::bar
是不純,然後提供給Foo::bar
實施,將被要求將呼籲Baz
實例Foo
和Baz::bar
情況下,即使是通過Foo*
。
(純虛也可以實現,這樣,例如,Baz::bar
可以調用Foo::bar
,但這種情況並不常見。)