亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

一、函數(shù)的重載

求兩個(gè)數(shù)中最大的值(分別考慮整數(shù)、浮點(diǎn)數(shù)、長(zhǎng)整數(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;
}
// 求最大值 - 浮點(diǎn)數(shù)
float max(float x, float y){
	float z;
	if(x > y) z = x;
	else z = y;
	return z;
}
// 求最大值 - 長(zhǎng)整數(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;
	// 計(jì)算大小
	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é)果如下:

運(yùn)行結(jié)果如下:

二、函數(shù)模板

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

2.1 分號(hào)錯(cuò)誤

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

template <typename T>;    // 錯(cuò)誤寫法

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

template <typename T>    // 正確寫法

或者后面緊跟獨(dú)立語(yǔ)句,可添加分號(hào),代碼如下:

// 模板聲明
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 重載命名錯(cuò)誤

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

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

#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;
	// 計(jì)算最大值
	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后,錯(cuò)誤即可解決了。

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

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

#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;
	// 計(jì)算最大值
	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é)果如下:

運(yùn)行結(jié)果如下:

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

相關(guān)文章

  • 利用C語(yǔ)言實(shí)現(xiàn)http服務(wù)器(Linux)

    利用C語(yǔ)言實(shí)現(xiàn)http服務(wù)器(Linux)

    本文將利用C語(yǔ)言實(shí)現(xiàn)一個(gè)輕量級(jí)的http服務(wù)器,使用Reactor模式,即主線程只負(fù)責(zé)監(jiān)聽(tīng)文件描述符上是否有事件發(fā)生,有的話立即將該事件通知工作線程,感興趣的可以了解一下
    2022-07-07
  • C語(yǔ)言枚舉類型詳解

    C語(yǔ)言枚舉類型詳解

    這篇文章主要介紹了C語(yǔ)言枚舉類型詳解的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • C語(yǔ)言超詳細(xì)講解指針與結(jié)構(gòu)體

    C語(yǔ)言超詳細(xì)講解指針與結(jié)構(gòu)體

    指針提供了對(duì)地址操作的一種方法,因此,使用指針可使得C語(yǔ)言能夠更高效地實(shí)現(xiàn)對(duì)計(jì)算機(jī)底層硬件的操作。另外,通過(guò)指針可以更便捷地操作數(shù)組。C數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是C編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng)
    2022-05-05
  • 使用C++實(shí)現(xiàn)全排列算法的方法詳解

    使用C++實(shí)現(xiàn)全排列算法的方法詳解

    本篇文章是對(duì)使用C++實(shí)現(xiàn)全排列算法的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++ COM編程之QueryInterface函數(shù)(二)

    C++ COM編程之QueryInterface函數(shù)(二)

    這篇文章主要介紹了C++ COM編程之QueryInterface函數(shù)(二),本文是第二篇,第一篇請(qǐng)參閱相關(guān)文檔,需要的朋友可以參考下
    2014-10-10
  • Qt信號(hào)與槽知識(shí)點(diǎn)總結(jié)歸納

    Qt信號(hào)與槽知識(shí)點(diǎn)總結(jié)歸納

    信號(hào)和槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,它是QT的核心特性,下面這篇文章主要給大家介紹了關(guān)于Qt信號(hào)與槽知識(shí)點(diǎn)總結(jié)歸納的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • C++ Boost Graph算法超詳細(xì)精講

    C++ Boost Graph算法超詳細(xì)精講

    這篇文章主要介紹了C++ Boost Graph算法,我門嘗試使用Boost.Graph庫(kù)來(lái)運(yùn)行Goldberg的最大流算法。 Boost.Graph將其稱為push_relabel_max_flow
    2022-10-10
  • 使用OpenCV實(shí)現(xiàn)檢測(cè)和追蹤車輛

    使用OpenCV實(shí)現(xiàn)檢測(cè)和追蹤車輛

    這篇文章主要為大家詳細(xì)介紹了使用OpenCV實(shí)現(xiàn)檢測(cè)和追蹤車輛,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++字符數(shù)組的輸入輸出和字符串結(jié)束標(biāo)志使用講解

    C++字符數(shù)組的輸入輸出和字符串結(jié)束標(biāo)志使用講解

    這篇文章主要介紹了C++字符數(shù)組的輸入輸出和符串結(jié)束標(biāo)志使用講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C++實(shí)現(xiàn)查找二叉樹(shù)中和為某一值的所有路徑的示例

    C++實(shí)現(xiàn)查找二叉樹(shù)中和為某一值的所有路徑的示例

    這篇文章主要介紹了C++實(shí)現(xiàn)查找二叉樹(shù)中和為某一值的所有路徑的示例,文中的方法是根據(jù)數(shù)組生成二叉排序樹(shù)并進(jìn)行遍歷,需要的朋友可以參考下
    2016-02-02

最新評(píng)論