C 中函式過載有什麼用,C語言和C 語言的區別是什麼?

2021-03-22 06:01:53 字數 6660 閱讀 8723

1樓:魚尾摯愛白菜

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

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

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

2樓:卷軒諸雲澤

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

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

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

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

這樣做很不友好!

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

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

3樓:桐軍夷婉麗

以algorithm裡的sort函式為例,default

(1)template

void

sort

(randomaccessiteratorfirst,

randomaccessiterator

last);

custom

(2)template

void

sort

(randomaccessiteratorfirst,

randomaccessiterator

last,

***pare

***p);

這是http://****cplusplus.

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

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

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

2.要麼使用函式過載函式,寫兩個引數不同的sort函式3.要麼只寫三個引數的形式,然後給第三個引數乙個預設值。

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

4樓:匿名使用者

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

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

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

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

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

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

哪些程式語言是函式式的

c++程式語言程式設計 100

5樓:化學小王子時代

這題主函式怎麼寫啊?

6樓:匿名使用者

class ***pany;

std::pair& operator(int i)***pany(const ***pany&) = delete;

***pany& operator=(const ***pany&) = delete;

***pany(***pany&&) = delete;

***pany& operator=(***pany&&) = delete;}

c語言和c++語言的區別是什麼?

7樓:小張

c語言與c++的區別有很多:

1,全新的程式程式思維,c語言是面向過程的,而c++是物件導向的。

2,c語言有標準的函式庫,它們鬆散的,只是把功能相同的函式放在乙個標頭檔案中;而c++對於大多數的函式都是有整合的很緊密,特別是c語言中沒有的c++中的api是對window系統的大多數api有機的組合,是乙個集體。但你也可能單獨呼叫api。

3,特別是c++中的圖形處理,它和語言的圖形有很大的區別。c語言中的圖形處理函式基本上是不能用在中c++中的。c語言標準中不包括圖形處理。

4,c和c++中都有結構的概念,但是在c語言中結構只有成員變數,而沒成員方法,而在c++中結構中,它可以有自己的成員變數和成員函式。但是在c語言中結構的成員是公共的,什麼想訪問它的都可以訪問;而在vc++中它沒有加限定符的為私有的。

4,c語言可以寫很多方面的程式,但是c++可以寫得更多更好,c++可以寫基於dosr程式,寫dll,寫控制項,寫系統。

5,c語言對程式的檔案的組織是鬆散的,幾乎是全要程式處理;而c++對檔案的組織是以工程,各檔案分類明確。

6,c++中的ide很智慧型,和vb一樣,有的功能可能比vb還強。

7,c++對可以自動生成你想要的程式結構使你可以省了很多時間。有很多可用的工具如加入mfc中的類的時候,加入變數的時候等等。

8,c++中的附加工具也有很多,可以進行系統的分析,可以檢視api;可以檢視控制項。

9,除錯功能強大,並且方法多樣

*c語言是面向過程的,而c++是物件導向的*

8樓:匿名使用者

c是c++子集,c語言中的大部命令和語句都能在c++裡執行,反過來則不行。

c語言是面向結構程式語言,c++是物件導向的程式語言。

c++提供了更豐富的函式和工具,更便於開發程式。

9樓:老子很涼

區別太多,跟你講下理念的區別吧:

c語言是面向過程語言,通過變數,函式等完成操作,一般用於較為底層的,和硬體直接打交道(比如控制暫存器,驅動程式的編寫)。

c++語言是一門物件導向語言,通過類,例項化類的物件來完成功能,相對於c語言更多應用於上層軟體。

語言沒有好壞優劣,只有適合不適合,要根據你要完成的專案決定語言和開發工具。

10樓:匿名使用者

在很大程度上,標準c++是標準c的超集.實際上,所有c程式也是c++程式,然而,兩者之間有少量區別.下面簡要介紹一下最重要的區別.

在c++中,民,區域性變數可以在乙個程式塊內在任何地方宣告,在c中,區域性變數必須在程式塊的開始部分,即在所有"操作"語句之前宣告,請注意,c99標準中取消了這種限制.

在c中,按如下方式宣告的函式沒有對函式變元進行任何說明;

int func();

也就是說,如果沒有在函式後面的括孤內指定任何變元,這在c中就意味著對函式變元未做任何宣告,該函式可能有變元,也可能沒有變元,然而,在c++中,這樣的函式宣告意味著該函式沒有變元,也就是說,在c++中,下面這兩個函式宣告具有同樣的作用:

int func();

int func(void);

在c++中,變元列表中的void是任選的.許多c++程式設計師使用它們是為了表明函式沒有任何變元的,以便於他人理解程式.但是,從技術上說,void不是必須的.

在c++中,所有函式均必須被設計成原型,但這在c中只是一種選擇.程式設計經驗表明,在程式中也應該給函式採用原型設計方法.在c與c++之間還存在乙個重要而又細微的差別,即字元常數在c中被自動作為整形來處理,但在c++中則不然.

在c中,多次宣告乙個全域性變數雖然不可取,但不算錯.在c++中,多次宣告同乙個全域性變數會引發錯誤.

在c中,乙個識別符號可以至少31個有效的組成字元.在c++中,乙個識別符號的所有組成字元均是有效的.可是,從實用角度看,過長的識別符號沒有太大的用處,不僅不便於記憶,而且還會增加出現打字錯誤的可能性.

在c中,在程式內部呼叫main()函式的情形不常見,但這種做法是容許的,在c++中,這種做法是不容許的.

在c中,無法獲得register型的位址,在c++中則可以獲得這種位址.

在c中,如果型別宣告語句中沒有指定型別名,該型別被假定成int,這種隱式轉型在c99與c++中是不允許的.

#include

using namespace std;

為什麼沒有.h字尾名?

名稱iostream沒有副檔名.h,原因是是標準c++所定義的新式頭部檔案之一,新式c++頭部檔案不再使用.h副檔名.

第二行告訴編譯程式使用std命名空間,命名空間是最近才新增到c++中,乙個命名空間建立乙個宣告範圍,在該範圍內可以放置各種程式元素.命名空間用來幫助組織大型程式的結構.這條using語句通知編譯程式,程式設計師需要使用std命名空間,這是整個標準c++庫宣告所使用的命名空間.

通過使用sdt命名空間,程式可以簡化對標準庫的訪問.普通c程式僅使用c子集,不需要命名空間語句,因為c的庫函式在預設的全域性命名空間中是可使用的.

類與結構體的區別:類與結構體是相互關聯的

結構是c的一部分,c++從c中繼承了結構,在語法上,類與結構十分相似,在關係上,這兩者也很接近,在c++中,結構的作用被拓寬了,進而使結構成為了類的一種替代方法.實際上,類與結構的惟一區別在於:在預設狀態下,結構的所有成員均是公有的,而類的所有成員是私有的.

除此之外,類與結構是等價的,也就是說,乙個結構定義了乙個類的型別.

c++同時包含這兩個等價的關鍵字struct與class基於3個方面的原因.第一,加強結構的能力.在c中,結構提供了一種資料分組方法,因而讓結構包含成員函式是乙個小小的改進.

第二,由於類與結構是相互關聯的,所有現有c**到c++的移植變得更容易.第三,由於類與結構的等價性,提供兩個不同的關鍵字可以使類定義自由發展,為了保持c++與c的相容性,結構定義必須始終受它的c定義的結束.

即使在有些地方可以使用結構來代替類,但盡量不要這麼做,為了清楚起見,該用類的地方就用class關鍵字,該用c結構的地方就用struct關鍵字.

類與聯合是相互關聯的

聯合也可以用來定義類.在c++中,聯合包含成員函式,變數以及構造與析構函式.c++聯合保留了c聯合的全部特徵,其中最重要的特徵是所有資料元素共享記憶體的相同位址.

與結構類似,聯合的成員在預設狀態下也是公有的,並且完全相容於c.與結構一樣,c++中的聯合宣告定義了一種特殊的類,進而意味著保持了類的封裝原則.

c++的聯合有幾個必須遵守的使用限制.第一,聯合不能繼承其他任何型別的類.第二,聯合不能是基類,不能包含有虛函式成員.

靜態變數不能是聯合的成員. 聯合不能使用引用成員,而且不能有任何作為成員的過載賦值運算子的物件.第三,如果乙個物件包含明確的構造或析構函式,該物件不能成為聯合的成員.

c++有乙個叫做匿名聯合的特殊聯合.匿名聯合沒有型別名,也不宣告任何變數,只是告訴編譯程式它的成員變數共享乙個記憶體位址.但是,變數本身無需要使用常規的點運算子語法即可直接引用.

上述聯合的使用限制也適用於匿名聯合,但下面這兩個限制除外,第一,匿名聯合所包含的元素只能是資料,不能包含成員函式,也不能包含私有或受保護元素;第二,全域性匿名聯合必須宣告成靜態的.

c語言與c++的區別有很多:

1,全新的程式程式思維,c語言是面向過程的,而c++是物件導向的。

2,c語言有標準的函式庫,它們鬆散的,只是把功能相同的函式放在乙個標頭檔案中;而c++對於大多數的函式都是有整合的很緊密,特別是c語言中沒有的c++中的api是對window系統的大多數api有機的組合,是乙個集體。但你也可能單獨呼叫api。

3,特別是c++中的圖形處理,它和語言的圖形有很大的區別。c語言中的圖形處理函式基本上是不能用在中c++中的。c語言標準中不包括圖形處理。

4,c和c++中都有結構的概念,但是在c語言中結構只有成員變數,而沒成員方法,而在c++中結構中,它可以有自己的成員變數和成員函式。但是在c語言中結構的成員是公共的,什麼想訪問它的都可以訪問;而在vc++中它沒有加限定符的為私有的。

4,c語言可以寫很多方面的程式,但是c++可以寫得更多更好,c++可以寫基於dosr程式,寫dll,寫控制項,寫系統。

5,c語言對程式的檔案的組織是鬆散的,幾乎是全要程式處理;而c++對檔案的組織是以工程,各檔案分類明確。

6,c++中的ide很智慧型,和vb一樣,有的功能可能比vb還強。

7,c++對可以自動生成你想要的程式結構使你可以省了很多時間。有很多可用的工具如加入mfc中的類的時候,加入變數的時候等等。

8,c++中的附加工具也有很多,可以進行系統的分析,可以檢視api;可以檢視控制項。

9,除錯功能強大,並且方法多樣

*c語言是面向過程的,而c++是物件導向的*

c中函式過載的原則是什麼啊,C中函式過載有啥用?

函式過載的定義 函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,這組函式被稱為過載函式。所以原則就是相同的函式名,不同的引數列表。返回值不能作為過載依據。c 中函式過載的原則是什麼啊?函式過載的定義 函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,...

C中過載賦值建構函式的問題,C複製建構函式和號過載問題

賦值運bai算符和複製建構函式都 du是用已存zhi在的b物件來建立另dao乙個物件a。不同之回處在於答 c 複製建構函式和 號過載問題 表述基本上沒有問bai題。從功能上來du說,建構函式是用於建立zhi物件的dao,operator其實是可以看成普通內的成員函式,只不容 過是以符號的形式代替文字...

c在c語言程式設計裡是做什麼用的, c 在C語言程式設計裡是做什麼用的??

通過你的描述我大概知道你要表述的意思了,fscanf是進行檔案讀取操作,而檔案中資料的存放格式是用中間 來描述規範的,當然,第一項大家都知道,是開啟檔案的指標 file,這裡是output fopen 至於第三項,是要儲存的位置,你的情況是 c字元,而 c就是檔案中的間隔符。有沒完整點的 啊。實在沒...