【C語言學習筆記】C語言的int slice()和C++的int slice()
阿新 • • 發佈:2022-04-05
結論: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語言不是面向物件的語言,所以不支援函式過載。
針對上述的觀點,我想表達自己的觀點:
- c語言支不支援函式過載和是否是面嚮物件語言沒有關係。
- 函式過載實際上是面向方法的。
首先,針對觀點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許可協議。轉載請註明出處!