最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++之函數(shù)的重載

 更新時間:2021年11月01日 08:59:43   作者:ALL IN C  
這篇文章主要介紹了c++函數(shù)重載的相關(guān)知識,文章講解的非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

一、C++ 函數(shù)重載

C++ 致力于簡化編程,能過函數(shù)重名來達(dá)到簡化編程的目的

1.重載規(guī)則

1.函數(shù)名相同

2.參數(shù)的個數(shù)不同,類型不同,順序不同,都可以構(gòu)成重載

3.返回值類型必須相同,不同則不可以構(gòu)成重載

例如:

void func(int a); //ok
void func(char a); //ok
void func(char a,int b); //ok
void func(int a, char b); //ok
char func(int a); //與第一個函數(shù)有沖突

2.匹配原則

1.嚴(yán)格匹配,找到則調(diào)用

2.通過隱式轉(zhuǎn)換尋求一個匹配,找到則調(diào)用

#include <iostream>
#include <iomanip>
using namespace std;
void print(double a){
	cout<<a<<endl;
}
void print(int a){
	cout<<a<<endl;
}
int main(){
	print(1); // print(int)
	print(1.1); // print(double)
	print('a'); // print(int)
	print(1.11f); // print(double)
	return 0;
}

輸出結(jié)果

C++ 允許,int 到 long 、double,double 到 int 、float 隱式類型轉(zhuǎn)換。遇到這種情型,則會引起二義性

例:將上題上的 print(int a)中的類型 int 改為double

rror: call of overloaded 'print(int)' is ambiguous
print(1); // print(int)
error: call of overloaded 'print(char)' is ambiguous
print('a'); 

解決方法,在調(diào)用時強轉(zhuǎn)

3.重載底層實現(xiàn)

C++利用 name mangling(傾軋)技術(shù),來改名函數(shù)名,區(qū)分參數(shù)不同的同名函數(shù)。

實現(xiàn)原理:用 v-c-i-f-l-d 表示 void char int float long double 及其引用。

void func(char a); // func_c(char a)
void func(char a, int b, double c);//func_cid(char a, int b, double c)

4.extern “C”

name mangling 發(fā)生在兩個階段,.cpp 編譯階段,和.h 的聲明階段。

只有兩個階段同時進(jìn)行,才能匹配調(diào)用。

mystring.h

extern "C"{
	int myStrlen(char *str);
}

mystring.cpp

#include "mystring.h"
int myStrlen(char *str)
{
	int len = 0;
	while(*str++)
	len++;
	return len;
}

main.cpp

#include <iostream>
#include "mystring.h"
using namespace std;
int main()
{
	char *p = "china";
	int len;
	len = myStrlen(p);
	return 0;
}

C++ 完全兼容 c 語言,那就面臨著,完全兼容 c 的類庫。由.c 文件的類庫文件中函數(shù)名,并沒有發(fā)生 name mangling 行為,而我們在包含.c 文件所對應(yīng)的.h 文件時,.h 文件要發(fā)生name manling 行為,因而會發(fā)生在鏈接的時候的錯誤。C++為了避免上述錯誤的發(fā)生,重載了關(guān)鍵字 extern。只需在要避免 name manling的函數(shù)前,加 extern “C” 如有多個,則 extern “C”{}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Qt6.0?qproperty-*不生效原因解決分析

    Qt6.0?qproperty-*不生效原因解決分析

    這篇文章主要為大家介紹了Qt6.0?qproperty-*不生效原因解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C語言中6組指針和自增運算符結(jié)合方式的運算順序問題

    C語言中6組指針和自增運算符結(jié)合方式的運算順序問題

    本文通過代碼實現(xiàn)分析了6種組合:* p++,(* p)++,* (p++),++* p,++( * p), * (++p),需要的朋友可以參考下
    2015-07-07
  • C語言?超詳細(xì)講解鏈接器

    C語言?超詳細(xì)講解鏈接器

    在C語言中,一個重要的思想就是分別編譯,即若干個源程序能夠在不一樣的時候單獨進(jìn)行編譯,而后在恰當(dāng)?shù)臅r候整合到一塊兒??墒擎溄悠魍ǔJ桥cC編譯器分離的,鏈接器如何作到把若干個C源程序合并成一個總體呢,我們一起來看看
    2022-03-03
  • C++ 數(shù)字的反轉(zhuǎn)實現(xiàn)實例

    C++ 數(shù)字的反轉(zhuǎn)實現(xiàn)實例

    這篇文章主要介紹了C++ 數(shù)字的反轉(zhuǎn)實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Qt實現(xiàn)生成指定范圍內(nèi)隨機數(shù)與隨機字符串

    Qt實現(xiàn)生成指定范圍內(nèi)隨機數(shù)與隨機字符串

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實現(xiàn)生成指定范圍內(nèi)隨機數(shù)與隨機字符串,文中的示例代碼簡潔易懂,感興趣的小伙伴可以自己動手嘗試一下
    2023-07-07
  • C語言數(shù)組實現(xiàn)打磚塊游戲

    C語言數(shù)組實現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)組實現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Qt5.9實現(xiàn)簡單復(fù)合圖形

    Qt5.9實現(xiàn)簡單復(fù)合圖形

    這篇文章主要為大家詳細(xì)介紹了Qt5.9實現(xiàn)簡單復(fù)合圖形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++中異常的深度解析

    C++中異常的深度解析

    異常處理機制允許程序中獨立開發(fā)部分能夠在運行時就出現(xiàn)的問題進(jìn)行通信并做出相應(yīng)的處理,這篇文章主要介紹了C++中異常的深度解析,需要的朋友可以參考下
    2025-03-03
  • 文件編譯時出現(xiàn)multiple definition of ''xxxxxx''的具體解決方法

    文件編譯時出現(xiàn)multiple definition of ''xxxxxx''的具體解決方法

    以下是對文件編譯時出現(xiàn)multiple definition of 'xxxxxx'的解決方法進(jìn)行了詳細(xì)的分析介紹,如也遇到此問題的朋友們可以過來參考下
    2013-07-07
  • C++11?中的override詳解

    C++11?中的override詳解

    這篇文章主要介紹了C++11?中的override詳解,本文以重寫虛函數(shù)時,容易犯的四個錯誤為例,結(jié)合示例代碼給大家詳細(xì)介紹,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論

许昌县| 新疆| 肇州县| 瑞丽市| 宜兴市| 海兴县| 葵青区| 太白县| 金塔县| 邹城市| 常州市| 株洲市| 安泽县| 平邑县| 堆龙德庆县| 乳山市| 易门县| 芜湖县| 江达县| 彭泽县| 监利县| 湖南省| 庆安县| 崇州市| 长宁县| 达州市| 巴塘县| 枝江市| 三门县| 廊坊市| 建湖县| 福建省| 长岭县| 玉门市| 隆回县| 丽水市| 五峰| 丁青县| 浮梁县| 临西县| 西乡县|