欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ 函數(shù)重載詳情介紹

 更新時間:2021年11月19日 09:10:23   作者:梁唐  
這篇文章主要介紹了C++ 函數(shù)重載詳情,函數(shù)重載還有一個別名叫函數(shù)多態(tài),函數(shù)多態(tài)是C++在C語言基礎(chǔ)上的新特性,它可以讓我們使用多個同名函數(shù),下面來看看文章具體內(nèi)容的介紹

文章轉(zhuǎn)自微信公眾號:Coder梁(ID:Coder_LT)

函數(shù)重載

函數(shù)重載還有一個別名叫函數(shù)多態(tài),其實(shí)我個人感覺函數(shù)多態(tài)這個名字更好理解更恰當(dāng)一些。

函數(shù)多態(tài)是C++在C語言基礎(chǔ)上的新特性,它可以讓我們使用多個同名函數(shù)。當(dāng)然這些同名函數(shù)的參數(shù)是要有區(qū)別的,我們在函數(shù)調(diào)用的時候,編譯器會自動根據(jù)我們傳入的參數(shù),從多個同名函數(shù)當(dāng)中找到我們調(diào)用的那一個。和面向?qū)ο罄锏亩鄳B(tài)的概念很接近。

我們在定義函數(shù)的時候,編譯器只會查看參數(shù)的數(shù)目和類型,而不會理會參數(shù)的名稱。只要參數(shù)的數(shù)量以及類型不完全相同,就會被認(rèn)為是不同的函數(shù)。

比如:

void print(const char *str, int width);
void print(double d, int width);
void print(long l, int width);
void print(int i, int width);
void print(const char *str);


上面列舉的5個函數(shù)它們彼此之間的函數(shù)參數(shù)的數(shù)量和類型都不完全相同,因此會被視為是不同的函數(shù)。我們在使用的時候編譯器會根據(jù)我們傳入的參數(shù)使用對應(yīng)的函數(shù)。

print('pancakes', 15); // use 1
print('pancakes');  // use 5
print(1999.0, 10);  // use 2
print(199, 23);   // use 4
print(199L, 15);  // use 3


這當(dāng)然沒有問題,如果我們這樣使用呢:

unsigned year = 2021;
print(year, 6);


我們可以發(fā)現(xiàn)我們這里傳入的參數(shù)類型是unsigned int,它不和任何函數(shù)的入?yún)㈩愋推ヅ?。這個時候編譯器并不會放棄,而是會嘗試使用標(biāo)準(zhǔn)類型轉(zhuǎn)換強(qiáng)制進(jìn)行匹配。但問題來了,我們有三個版本的函數(shù)的第一個入?yún)⑹菙?shù)字類型,于是就有了三種變量轉(zhuǎn)換的方式。這個時候C++將拒絕這種函數(shù)調(diào)用,進(jìn)行報錯。

同樣,一些看起來彼此不同的參數(shù)也是不能共存的,比如:

double cube(double x);
double cube(double &x);


看起來一個是值傳遞一個是引用傳遞,但是對于編譯器來說,顯然它是無法分辨我們究竟要調(diào)用哪一個的。

還有一點(diǎn)需要注意,就是const修飾符。

void dribble(char *bits);   //1
void dribble(const char *bits); //2


dribble函數(shù)有兩個類型,一個用于const指針,一個用于常規(guī)指針,編譯器將會根據(jù)實(shí)參是否為const來決定使用哪個函數(shù)。因?yàn)閷⒎?code>const值賦給const變量是合法的,但反之是非法的。

另外,編譯器區(qū)分函數(shù)是根據(jù)函數(shù)的參數(shù)數(shù)量和類型并不是根據(jù)函數(shù)的返回值。所以下面的兩個聲明是有問題的:

long gronk(int n, float m);
double gronk(int n, float m);


因?yàn)樗鼈兊膮?shù)數(shù)量以及類型都是一樣的,盡管返回類型不同,但編譯器依然無法區(qū)分。

這個問題經(jīng)常在面試當(dāng)中出現(xiàn),面試官會故意挖坑問你,函數(shù)重載的依據(jù)是什么。如果兩個函數(shù)的返回類型不同,但是參數(shù)一樣,能不能重載。很多同學(xué)對重載的概念記憶不是非常深刻,面試的時候腦子一熱就中招了,所以一定要注意。

到此這篇關(guān)于C++ 函數(shù)重載詳情介紹的文章就介紹到這了,更多相關(guān)C++ 函數(shù)重載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ POSIX API超詳細(xì)分析

    C++ POSIX API超詳細(xì)分析

    這篇文章主要介紹了C++ POSIXAPI的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • 不要被C++(自動生成規(guī)則)所蒙騙

    不要被C++(自動生成規(guī)則)所蒙騙

    正如標(biāo)題所說,我們不要被C++語法中所描述的那些條條框框所“蒙騙”了。的確,相信這些生成規(guī)則不會對我們的編程帶來多大的影響(不會產(chǎn)生錯誤),但是只有了解它們的背后操作,我們才知道編譯器究竟為我們做了什么,感興趣的朋友可以了解下,希望本文對你有所幫助
    2013-01-01
  • C++ 互斥鎖原理以及實(shí)際使用介紹

    C++ 互斥鎖原理以及實(shí)際使用介紹

    本文主要聊一聊如何使用互斥鎖以及都有哪幾種方式實(shí)現(xiàn)互斥鎖。實(shí)現(xiàn)互斥,可以有以下幾種方式:互斥量(Mutex)、遞歸互斥量(Recursive Mutex)、讀寫鎖(Read-Write Lock)、條件變量(Condition Variable)。感興趣的同學(xué)可以參考一下
    2023-04-04
  • C++使用jsoncpp庫解析Json

    C++使用jsoncpp庫解析Json

    對json的解析操作是我們?nèi)粘i_發(fā)中經(jīng)常會遇到的一個需求,下面這篇文章主要給大家介紹了關(guān)于C++使用jsoncpp庫解析Json的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • opencv平均背景法詳解

    opencv平均背景法詳解

    這篇文章主要為大家詳細(xì)介紹了opencv平均背景法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言宏定義容易認(rèn)不清的盲區(qū)梳理

    C語言宏定義容易認(rèn)不清的盲區(qū)梳理

    宏定義是C提供的三種預(yù)處理(宏定義、文件包含、條件編譯)的其中一種,其主要目的是為程序員在編程時提供一定的方便,并能在一定程度上提高程序的運(yùn)行效率
    2022-09-09
  • C++返回值是類名和返回值是引用的區(qū)別及說明

    C++返回值是類名和返回值是引用的區(qū)別及說明

    這篇文章主要介紹了C++返回值是類名和返回值是引用的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • CRITICAL_SECTION用法案例詳解

    CRITICAL_SECTION用法案例詳解

    這篇文章主要介紹了CRITICAL_SECTION用法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 對C語言編程標(biāo)準(zhǔn)以及聲明的基本理解

    對C語言編程標(biāo)準(zhǔn)以及聲明的基本理解

    這篇文章主要介紹了對C語言編程標(biāo)準(zhǔn)以及聲明的基本理解,有助于對C語言編寫時的結(jié)構(gòu)有更加清晰的認(rèn)識,需要的朋友可以參考下
    2015-11-11
  • 基于C++和MFC開發(fā)象棋程序

    基于C++和MFC開發(fā)象棋程序

    這篇文章主要為大家詳細(xì)介紹了基于C++和MFC開發(fā)象棋程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論