Abstract
若abstract base class將某個function設為virtual function後,則該function永世都為virtual function。

Introduction
我以前以為一個virtual function,只要繼承體系中某個class不希望其為virtual,只要不下virtual keyword即可,但這個觀念是錯誤的!!
UML
(原創) 一旦為virtaul,則永世為virtual (C/C++) (.NET) (C#)

C++

 1}


執行結果

(原創) 一旦為virtaul,則永世為virtual (C/C++) (.NET) (C#)Derived1st's func
(原創) 一旦為virtaul,則永世為virtual (C/C++) (.NET) (C#)Derived2nd's func


儘管20行

}


已經沒加virtual了

但27行

}


仍然可以繼續override,且結果也顯示override成功,這顯示了,一旦為virual function,則永世為virtual function。事實上,在UML也反映出這個原則,一個斜體的virtual function被繼承時,到了derived class仍是斜體。

C#雖然語法稍微不同,但原則仍然相同。
C#

 1}


執行結果

(原創) 一旦為virtaul,則永世為virtual (C/C++) (.NET) (C#)Derived1st's func
(原創) 一旦為virtaul,則永世為virtual (C/C++) (.NET) (C#)Derived2nd's func


11行

}


C#的abstract,就是C++的pure virtual,且必須在class加上abstract。

16行

}


C#則規定一定要加上override,C++則不用。

Conclusion
C++和C#僅是語法上的小差異,但精神相同。

相关文章:

  • 2022-01-15
  • 2021-10-14
  • 2022-03-06
  • 2021-11-20
  • 2022-03-01
  • 2021-12-20
  • 2021-08-15
猜你喜欢
  • 2021-09-19
  • 2021-11-18
  • 2021-10-30
  • 2022-03-06
  • 2021-06-22
  • 2022-01-17
  • 2022-01-03
相关资源
相似解决方案