Abstract
若abstract base class將某個function設為virtual function後,則該function永世都為virtual function。
Introduction
我以前以為一個virtual function,只要繼承體系中某個class不希望其為virtual,只要不下virtual keyword即可,但這個觀念是錯誤的!!
UML
C++
1
}
執行結果
儘管20行
已經沒加virtual了
但27行
仍然可以繼續override,且結果也顯示override成功,這顯示了,一旦為virual function,則永世為virtual function。事實上,在UML也反映出這個原則,一個斜體的virtual function被繼承時,到了derived class仍是斜體。
C#雖然語法稍微不同,但原則仍然相同。
C#
1
}
執行結果
11行
C#的abstract,就是C++的pure virtual,且必須在class加上abstract。
16行
C#則規定一定要加上override,C++則不用。
Conclusion
C++和C#僅是語法上的小差異,但精神相同。