c 函式過載函式,C 函式過載函式

時間 2021-09-04 02:33:22

1樓:匿名使用者

用模板做確實**更精簡,這是詳細的程式都給你寫出來了,費了很長時間,樓主給力啊!呵呵

#include "iostream"

#include "stdio.h"

using namespace std;

#define m 10//定義要排序的陣列個數,根據需要修改//三個過載函式宣告

void menu();

void sort(int a[m]);//整數排序void sort(float a[m]);//單精度數排序void sort(double a[m]);//雙精度數排序//主函式

int main() }

void sort(float a[m]) }void sort(double a[m]) }

2樓:匿名使用者

函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,這組函式被稱為過載函式。

過載函式通常用來命名一組功能相似的函式,這樣做減少了函式名的數量,避免了名字空間的汙染,對於程式的可讀性有很大的好處。

試想如果沒有函式過載機制,如在c中,必須要這樣去做:為print函式取不同的名字,如print_int、print_string。

3樓:手機使用者

t;int add(int x,int y);

void add(char *s1,char *s2);

void main()

int add(int x,int y)

void add(char *s1,char *s2)for(j=0;;i++,j++)

s3[i]='\0';

cout<

} 應該這樣改吧,你那裡for迴圈裡的提交弄個i,而i被賦值為0,那條件不就是假了嗎?for迴圈怎麼可能進得去?

c++中函式過載的原則是什麼啊?

4樓:百度使用者

函式過載的定義:

函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,這組函式被稱為過載函式。、

所以原則就是相同的函式名,不同的引數列表。返回值不能作為過載依據。

5樓:

函式名相同,形參型別或形引數目不同,這是最基本的要求。

c++中函式過載是什麼,能舉個例子說明是如何過載的嗎

6樓:blue丶小

函式過載:

c++允許定bai義多個du同名函式,但zhi是引數不能相同,

dao必須滿足以下條件之一版

1,引數型別不同權

2,引數數量不同              比如:

int fun(int,int);

int fun(long,int);             //型別不同

int fun(int);                  //數量不同

這樣三個函式實現了過載,編譯器會認為是三個不同的函式ps:返回值型別不同,引數相同,是不能過載的

7樓:匿名使用者

實際上就是兩個函式,引數不同名字相同 編譯器根據引數把它們區分開,實際上最後它們的名字還是不一樣的

8樓:重新整理

就是相同作用域,相同函式名,不同的引數!根據引數來呼叫對心的函式

c++中兩個函式函式名相同,引數型別和引數個數也相同,但是函式型別不同,那它們是過載函式嗎?

9樓:匿名使用者

函式過載只看引數個數和型別 所以如果只是返回值相同的函式就不是過載函式了

10樓:莊政警

這樣不是過載。

函式過載要求函式的引數個數不同或者引數型別不同。

因為呼叫函式的時候無法確認函式的返回型別,所以僅返回型別不同的函式都可以匹配,這樣就造成二義性,所以僅僅是返回型別不同是不能過載的,

比如有int f(int a)

float f(int a)

int main()

11樓:匿名使用者

函式過載是是根據函式的引數列表區分函式的版本,返回值不同是不能區分的。

比如 int fun( int a,int b);

在編譯的時候,編譯器編譯函式,生成一個類似"_fun_int_int"的名稱放在庫中,以便程式呼叫的時候使用。

如果你想過載void fun( int a,int b);

生成的函式名稱也是"_fun_int_int"

函式在庫中的名稱是唯一的,就像你在程式中定義變數一樣。

這就算是重定義吧(姑且這麼說),這時編譯器該呼叫哪個函式?

12樓:

不是過載函式,編譯器應該會報錯。

c++中函式過載有啥用?

13樓:魚尾摯愛白菜

類的建構函式跟類名相同,即建構函式都同名。如果沒有函式過載機制,要想例項化不同的物件非常麻煩。

操作符過載,本質上就是函式過載,它大大豐富了已有操作符的含義,方便使用,例如「+」可用於連線字串等。

過載函式是函式的一種特殊情況,為方便使用,c++允許在同一範圍中宣告幾個功能類似的同名函式,但是這些同名函式的形式引數(指引數的個數、型別或者順序)必須不同,也就是說用同一個運算子完成不同的運算功能。這就是過載函式。過載函式常用來實現功能類似而所處理的資料型別不同的問題。

14樓:匿名使用者

函式過載不能完全替代可變長引數……雖然函式過載可以讓你在同一個**裡寫出print(1,2,'a');和print("a=",12);而不需要寫printf("%d%d%c",1,2,'a')和printf("%s%d","a=",12);,但代價是你需要寫無數個print函式的定義……例如這個例子裡你就要同時寫int print(const int,const int,const char)函式的定義和int print(const char*,const int)函式的定義。

儘管如果函式的引數型別唯一且引數數目在一個很小的範圍內,那麼代價還是可以接受的(畢竟有安全性作為補償),但仍然是一種麻煩的辦法,c++11的變長引數模板給了一種既無需寫無數個函式定義又具有安全性的解決方法……

15樓:匿名使用者

過載是是c++的機制,是指具有同名但具有不同簽名(返回型別和引數)的一組函式可以同時存在,有編譯器在編譯時自動匹配合適函式的機制。而c不允許存在同名函式,如果需要同名但不同引數的呼叫,只能採用變參技術。

原因:c++ 編譯時,會根據函式名、返回值、引數給函式 重新取名為,有不用函式名稱、函式簽名的函式會有不同的不同的函式名稱,因此編譯時可以根據 這些要素找到匹配的呼叫函式;

而c, 在編譯時,只根據函式名稱找匹配的函式,因此不允許存在兩個同名函式。

作用:主要作用為,對外提供類似功能的統一介面。

如:開啟檔案,開啟電源,開啟窗戶等都是開啟動作,在c中我們必須提供 openfile()、openpower()、openwindow() 等一系列不同名稱的函式,這對外部呼叫帶來很多困難,因為我們必須記住所有的開啟函式名稱。但c++中我們只提供open(tfile& file),open(tpower& power), open(twindow& window)即可,呼叫者只需要記住有open()函式即可。

這回大大可以程式可讀性和開發效率。

16樓:祜風

1、函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,這組函式被稱為過載函式。

2、過載函式通常用來命名一組功能相似的函式,這樣做減少了函式名的數量,避免了名字空間的汙染,對於程式的可讀性有很大的好處。

3、具體優點說來有三點:

(1)、試想如果沒有函式過載機制,如在c中,必須要這樣去做:為這個print函式取不同的名字,如print_int、print_string。這裡還只是兩個的情況,如果是很多個的話,就需要為實現同一個功能的函式取很多個名字,如加入列印long型、char*、各種型別的陣列等等。

這樣做很不友好!

(2)、類的建構函式跟類名相同,也就是說:建構函式都同名。如果沒有函式過載機制,要想例項化不同的物件,那是相當的麻煩!

(3)、操作符過載,本質上就是函式過載,它大大豐富了已有操作符的含義,方便使用,如+可用於連線字串等!

17樓:匿名使用者

以algorithm裡的sort函式為例,

default (1)template

void sort (randomaccessiterator first, randomaccessiterator last);

custom (2)template

void sort (randomaccessiterator first, randomaccessiterator last, compare comp);

這是

上的內容,sort有兩種形式,第一種接受兩個迭代器,然後對序列排序,第二種,接受兩個迭代器和一個自定義的比較函式來告訴sort該怎麼樣進行排序。

你可以看到,兩種形式的差別在與第二種形式多了一個引數,為了實現這種函式,

1.要麼使用變參函式,寫一個sort(iter,iter, ...)來將第三個引數作為變參

2.要麼使用函式過載函式,寫兩個引數不同的sort函式

3.要麼只寫三個引數的形式,然後給第三個引數一個預設值。

這三種方法都可以實現函式名相同,引數不同的函式。你可以在標準庫裡看到許多過載的函式,使用相同的函式名錶示我在做同一件事,而接受引數不同,可以用於不同的情況。相比於使用變參而言,第二種和第三種技術會更簡單,更方便。

18樓:匿名使用者

也就是一種多型,比如你有了電腦就可以上網聽**看電影玩遊戲一應俱全,而不必去看電視,玩小霸王或者去影院,比喻可能不恰當不過基本這個意思。

本質是c++ oop的需要,因為c裡函式名無法重複,而c++只規定函式特徵標不能重複,也就是說c++裡同一個函式名,比如compare,可以比較字串與字串,整數與整數,甚至字串和整數的大小,而c裡就不得不用3個不同名的函式實現比如string_compare,int_compare之類,這顯然比較麻煩。另外變參在設計上並不完全安全因為沒有型別資訊,這也有悖oop設計理念。

c++ 如何在過載函式中呼叫被過載函式

19樓:匿名使用者

事先宣告過載函式

c++的基本規則:實體在使用前須先宣告。這裡也是一樣,要呼叫過載版本,須先宣告這個過載版本

在c++,如何實現函式的過載?

20樓:董俊錕

分幾種情況,函式過載 可以根據函式的返回值型別 , 形參的個數, 通過const 關鍵字也可以實現函式過載

21樓:匿名使用者

寫多個引數不同的函式即可,保證函式名相同

22樓:匿名使用者

函式名相同,變數不同即可

C語言支援函式過載嗎?C 中函式過載有什麼用?

不支援,c裡面沒有過載這個概念。因為c不是物件導向的語言。c不支援 c 支援,因而在c 的標頭檔案中有很多因為要和c相容,extern c 的語句就是避免有些c 中可以過載的函式在c中產生衝突。c 中函式過載有什麼用?c 中函式過載有啥用?類的建構函式跟類名相同,即建構函式都同名。如果沒有函式過載機...

什麼叫函式過載,c 中函式過載的原則是什麼啊?

憶安顏 函式過載是一個同名函式完成不同的功能,編譯系統在編譯階段通過函式引數個數 引數型別不同,函式的返回值來區分該呼叫哪一個函式,即實現的是靜態的多型性。但是記住 不能僅僅通過函式返回值不同來實現函式過載。過載函式的多義性無法確定,直到遇到函式呼叫。此時,將為函式呼叫中的每個引數生成集,並且可以確...

c語言中既然不支援函式過載那麼printf算怎麼回

printf 是可變引數傳遞,不是過載。 樓上說的不錯,printf只是函式呼叫而已 這個問題問的不錯。其實printf不是過載,c語言不支援函式過載 這句話是對的。printf函式是通過變長參數列實現的。你可以檢視一下printf的函式原型宣告。printf函式的實現在不同的機器上是不同的,但提供...