1. 程式人生 > 其它 >【C語言學習筆記】C語言的int slice()和C++的int slice()

【C語言學習筆記】C語言的int slice()和C++的int slice()

結論:C語言的int slice()和C++的int slice()是不同的。

實驗:

可以看的在c語言中,是允許在宣告函式的時候,使用函式原型int test(),裡面不需要包含函式的引數,到函式實現的時候再補上函式的引數,但是這種行為是歷史遺留的問題,不建議使用。

在C++中,當我們使用上述的程式碼,編譯器會報錯,因為函式宣告時缺少引數,實際上c++中的int test()int test(void),即聲明瞭一個test函式,它不接受引數。

深入思考:

通過該實驗,我們可以發現,在c語言和c++中,函式的簽名是不一樣的。c語言的函式簽名只有函式名,int test(int a, int b)

的函式簽名可以認為是_test,而在c++中,int test(int a, int b)的函式簽名則是_test_int_int
由此,我們可以得知,c語言不支援函式過載。

發散思維:

在網上搜索資料的時候,看到這麼一個解釋:因為c語言不是面向物件的語言,所以不支援函式過載。
針對上述的觀點,我想表達自己的觀點:

  1. c語言支不支援函式過載和是否是面嚮物件語言沒有關係。
  2. 函式過載實際上是面向方法的。

首先,針對觀點1,我們通過上述的分析,可以知道c語言的函式簽名只有函式名,從當初的設計上就註定無法支援函式過載。
其次,針對觀點2,我們先看一下wiki對Function overloading的定義:
In some programming languages, function overloading or method overloading is the ability to create multiple functions of the same name with different implementations.


即函式名相同,函式實現不同,它的規則就是:函式名相同,但是引數的數量或者型別不一樣。有的人可能會把函式過載和麵向物件中的多型性弄混,實際上,函式過載的結果取決於引數,而我們在面向物件中所說的多型性一般是函式重寫引起的,是取決於執行時的。

補充:

在Java中可以稱函式過載(overload)為靜態多型性、編譯時多型性;稱函式重寫(override)(C++通過虛擬函式實現)為動態多型性、執行時多型性。

核心概念:

  • 函式簽名
  • 函式過載
  • 函式重寫
  • (動態)多型性
本文作者:bobozi的部落格
關於博主:評論和私信會在第一時間回覆。或者直接私信我。
版權宣告:本部落格所有文章除特別宣告外,均採用BY-NC-SA許可協議。轉載請註明出處!