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

C++程序函數(shù)的重載和函數(shù)模板示例代碼

 更新時間:2024年03月18日 12:06:22   作者:覺醒法師  
C++允許在同一作用域中用同一函數(shù)名定義多個函數(shù),這些函數(shù)的參數(shù)個數(shù)和參數(shù)類型不相同,這些同名的函數(shù)用來實現(xiàn)不同的功能,這就是函數(shù)的重載,這篇文章主要介紹了C++程序函數(shù)的重載和函數(shù)模板,需要的朋友可以參考下

在C++中,函數(shù)也可以重載。C++允許在同一作用域中用同一函數(shù)名定義多個函數(shù),這些函數(shù)的參數(shù)個數(shù)和參數(shù)類型不相同,這些同名的函數(shù)用來實現(xiàn)不同的功能,這就是函數(shù)的重載。

函數(shù)的重載的函數(shù)體是完全相同的,只是形參和類型不同,也要分別定義。為了解決這個問題,C++提供了函數(shù)模板(function template)。函數(shù)模板,實際上是建立一個通用函數(shù)類型和形參類型不具體指定,用一個虛擬的類型來代表,這個通用函數(shù)就稱為函數(shù)模板。

一、函數(shù)的重載

求兩個數(shù)中最大的值(分別考慮整數(shù)、浮點數(shù)、長整數(shù)的情況)。代碼如下:

#include <iostream>
using namespace std;
// 求最大值 - 整數(shù)
int max(int x, int y){
	int z;
	if(x > y) z = x;
	else z = y;
	return z;
}
// 求最大值 - 浮點數(shù)
float max(float x, float y){
	float z;
	if(x > y) z = x;
	else z = y;
	return z;
}
// 求最大值 - 長整數(shù)
long max(long x, long y){
	long z;
	if(x > y) z = x;
	else z = y;
	return z;
}
int main(){
	int a, b;
	float c, d;
	long e, f;
	// 輸入流
	cin >> a >> b;
	cin >> c >> d;
	cin >> e >> f;
	// 計算大小
	int max_int = max(a, b);
	float max_float = max(c, d);
	long max_long = max(e, f);
	//輸出內(nèi)容
	cout << "int max value:" << max_int << endl;
	cout << "float max value:" << max_float << endl;
	cout << "long max value:" << max_long << endl;
}

編譯結(jié)果如下:

運行結(jié)果如下:

二、函數(shù)模板

通過上面例子可以看出,函數(shù)重置的函數(shù)體是完全相同的,只是形參的類型不同。很多人自然會想到,對此是否能簡化。剛好C++提供了函數(shù)模板,可以解決這個問題。

2.1 分號錯誤

在定義函數(shù)模板時,需要注意的是結(jié)束位置是不需要加分號的,除非是在模板聲明之后緊跟著另一個獨立的語句。如果在函數(shù)模板聲明結(jié)束位置添加分號后,編譯器在處理這額外的分號會報錯:“[Error] expected unqualified-id before ';' token”和“[Error] 'T' does not name a type”。代碼如下:

template <typename T>;    // 錯誤寫法

將結(jié)束位置分號去掉即可,代碼如下:

template <typename T>    // 正確寫法

或者后面緊跟獨立語句,可添加分號,代碼如下:

// 模板聲明
template <typename T>
// 定義通用函數(shù),用T作虛擬類型名
T get_max(T a, T b){
	T c;
	if(a > b) c = a;
	else c = b;
	return c;
};

2.2 重載命名錯誤

可能是自己的代碼中定義了額外的 max 重載版本,這些版本與標(biāo)準(zhǔn)庫中的 max 函數(shù)產(chǎn)生了沖突,或者其他原因,導(dǎo)致繼續(xù)使用max命名函數(shù)時,編譯時程序報錯:“[Error] call of overloaded 'max(int&, int&)' is ambiguous”。

編譯器在嘗試調(diào)用名為 max 的重載函數(shù)時,發(fā)現(xiàn)了多個匹配的重載版本,但它無法確定應(yīng)該使用哪一個,因此調(diào)用是模棱兩可的(ambiguous)。導(dǎo)致錯誤代碼如下:

#include <iostream>
using namespace std;
// 模板聲明
template <typename T>
// 定義通用函數(shù),用T作虛擬類型名
T max(T a, T b){
	T c;
	if(a > b) c = a;
	else c = b;
	return c;
}
int main(){
	int a = 10, b = 15, max_int;
	float c = 23.2, d = 32.22, max_float;
	long e = 63425, f = -232, max_long;
	// 計算最大值
	max_int = max(a, b);
	max_float = max(c, d);
	max_long = max(e, f);
	// 輸出數(shù)據(jù)
	cout << "int max value:" << max_int << endl;
	cout << "float max value:" << max_float << endl;
	cout << "long max value:" << max_long << endl;
	return 0;
}                                              

因此,這邊將max修改為get_max后,錯誤即可解決了。

2.3 函數(shù)模板實現(xiàn)

這里將上面例子通過函數(shù)模板重新實現(xiàn)一遍,前面已將函數(shù)模板定義分號問題和函數(shù)命名問題解決后,正確代碼如下:

#include <iostream>
using namespace std;
// 模板聲明
template <typename T>
// 定義通用函數(shù),用T作虛擬類型名
T get_max(T a, T b){
	T c;
	if(a > b) c = a;
	else c = b;
	return c;
}
int main(){
	int a = 10, b = 15, max_int;
	float c = 23.2, d = 32.22, max_float;
	long e = 63425, f = -232, max_long;
	// 計算最大值
	max_int = get_max(a, b);
	max_float = get_max(c, d);
	max_long = get_max(e, f);
	// 輸出數(shù)據(jù)
	cout << "int max value:" << max_int << endl;
	cout << "float max value:" << max_float << endl;
	cout << "long max value:" << max_long << endl;
	return 0;
}                                              

編譯結(jié)果如下:

運行結(jié)果如下:

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

相關(guān)文章

  • c語言實現(xiàn)奇偶排序算法

    c語言實現(xiàn)奇偶排序算法

    這篇文章主要介紹了c語言實現(xiàn)奇偶排序算法,有需要的朋友可以參考一下
    2013-12-12
  • C++11中異常處理機制詳解

    C++11中異常處理機制詳解

    傳統(tǒng)的C語言處理異常的方式有兩種:終止程序和返回錯誤碼。在實際中的C語言程序基本都是通過返回錯誤碼的方式來處理錯誤的,部分情況下使用終止程序來處理比較嚴(yán)重的錯誤。本文將通過示例和大家聊聊C++11中異常處理機制,需要的可以參考一下
    2022-09-09
  • opencv3/C++ 實現(xiàn)SURF特征檢測

    opencv3/C++ 實現(xiàn)SURF特征檢測

    今天小編就為大家分享一篇opencv3/C++ 實現(xiàn)SURF特征檢測,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Qt實現(xiàn)Slider滑塊條組件的示例代碼

    Qt實現(xiàn)Slider滑塊條組件的示例代碼

    在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,本文主要介紹了Qt實現(xiàn)Slider滑塊條組件的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • QT安裝MQTT庫的實現(xiàn)步驟

    QT安裝MQTT庫的實現(xiàn)步驟

    本文分別介紹了在Windows、Linux、ARM板卡下給QT安裝MQTT庫的步驟,具有一定的參考價值,感興趣的可以了解一下
    2026-01-01
  • C++代碼實現(xiàn)網(wǎng)絡(luò)Ping功能

    C++代碼實現(xiàn)網(wǎng)絡(luò)Ping功能

    這篇文章主要介紹了C++代碼實現(xiàn)網(wǎng)絡(luò)Ping功能,Ping命令被送到本地計算機的IP軟件,該命令永不退出該計算機,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-08-08
  • C++實現(xiàn)HTTP服務(wù)的示例代碼

    C++實現(xiàn)HTTP服務(wù)的示例代碼

    本文主要介紹了C++實現(xiàn)HTTP服務(wù)的示例代碼,C++ HTTP,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • C語言實現(xiàn)五子棋對戰(zhàn)系統(tǒng)

    C語言實現(xiàn)五子棋對戰(zhàn)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)五子棋對戰(zhàn)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語言內(nèi)存函數(shù)的實現(xiàn)示例

    C語言內(nèi)存函數(shù)的實現(xiàn)示例

    本文主要介紹了C語言內(nèi)存函數(shù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • C語言實現(xiàn)的猴子偷桃之類算法

    C語言實現(xiàn)的猴子偷桃之類算法

    本文給大家分享的是前些日子去面試的時候的試題,哎,真是沒想到會出這么個題,好多年沒碰過C了。。。。分享給大家,小伙伴們過來參觀下吧。
    2015-03-03

最新評論

奈曼旗| 梅河口市| 江陵县| 郁南县| 申扎县| 措勤县| 白银市| 黄龙县| 辽宁省| 那坡县| 东至县| 盐边县| 芦溪县| 阳泉市| 辽阳市| 绥化市| 友谊县| 远安县| 信阳市| 灵山县| 义马市| 济源市| 瑞金市| 利辛县| 抚顺县| 哈巴河县| 泰兴市| 滦南县| 文安县| 都兰县| 琼海市| 灵石县| 黎平县| 湖州市| 合水县| 将乐县| 边坝县| 卢氏县| 遵义县| 和顺县| 商城县|