C 對C語言的非物件導向特性擴充 2

2022-03-26 08:55:29 字數 2322 閱讀 4251

#include

int add(int x,int y);

int main()

int add(int x,int y)

不過也可以採用簡潔的方式來宣告,如:int add(); add(); 都可以通過編譯;但是在c++裡,如果函式定義在後,呼叫在前,那函式原型的宣告必須是int add(int x,int y);函式名稱,引數型別和個數,以及返回值都必須說明;如果函式定義在前,呼叫在後則和c一樣。以上這種形式在c++裡也等同於int add(int ,int);如果在原型說明中沒有指出返回型別c++預設返回型別為int,不需要返回值,就用void。另外標準c++要求的main函式的返回值必須為int;

2.內聯函式就是在函式說明前冠以關鍵字"inline",當c++在編譯時使用函式體中的**插入到要呼叫該函式的語句之處,同時用實參代替形參,以便在程式執行時不再進行函式呼叫。比如:

#include

using namespace std;

inline int add(int a,int b)

int main()

在編譯時,遇到函式啊add(x,y)時,用函式體代替add(x,y),同時實參代替形參,這樣「sum=add(x,y)」被替換成「」;那麼為什麼要引入內聯函式呢?主要是為消除函式呼叫時的系統開銷,以提高系統的執行速度。在程式執行過程中呼叫函式,系統要將程式當前的一些狀態資訊存到棧中,同時轉到函式的**處去執行函式體的語句,這些引數儲存和傳遞過程中需要時間和空間的開銷,使得程式效率降低。但是並不是什麼函式都可以定義為內聯函式,一般情況下,只有規模很小而是用頻繁的函式才定義為內聯函式,這樣可以大大提高執行速率。

3.一般情況下,實參的個數應該和形參的一樣,但在c++中則不一定,方法是在說明函式原型時,為乙個或多個形參制定預設值,以後呼叫此函式,如省略其中一實參,c++自動地以預設值作為相應引數的值。比如int add(int x=10,int y=10),那麼我們在呼叫該函式時可以有三種寫法:add(50,50)//結果為50+50;add(50)//結果為50+10;add()//結果10+10;這樣使函式更加靈活。但要注意的是預設引數必須是在引數列表的最右端,int add(int x,int y=10,int z)這樣是錯誤的,還有不允許某個引數省略後,再給其後的引數指定引數值。如果函式定義在函式呼叫之後,則函式呼叫之前需要函式宣告,此時必須在函式宣告中給出預設值,在函式定義時就不要給出預設值了(因為有的c++編譯系統會給出"重複指定預設值"的錯誤資訊)

;4.函式的過載,對於這個我想學過c#的朋友一定在熟悉不過了,它意味著,只要函式引數的型別不同,或者引數的個數不同,或者兩者兼而有之,兩個或兩個以上的的函式可以使用相同的函式名。儘管簡單,但是我還是想說說它在c++裡所要注意的幾個問題:1.函式返回值不再函式引數匹配檢查之列;2.函式過載與帶預設引數的函式一起使用可能引起二義性比如:int fun(int x=0;int y=10)和int fun(int r)這時候我這樣呼叫fun(10);3.如果函式呼叫給出的實參和形參型別不符,c++會自定執行型別轉換,轉換成功會繼續執行,但是在這種情況下可能會出現不可識別的錯誤:int add(int x,int y)和long add(long,long),這時候我這樣呼叫add(9.9,8.8);

5.最後還是一樣通過乙個例項來總結一下今天的內容:

1#include

"stdafx.h"2

#include

<

iostream

>

3using

namespace

std;45

intadd(

intx,

inty);

//或int add(int,int)67

inline

intsub(

intx,

inty)

//內聯函式811

12double

mul(

doublex=

10.0

,doubley=

10.0

);//

帶有預設引數的函式

1314

float

add(

float

x,float

y)//

函式過載

1518

19int

main()

2046

47int

add(

intx,

inty)

4851

52double

mul(

double

x,double

y)53

結果:

C 對C的擴充

int a int b a 宣告b是乙個整型變數a的引用變數 型別可以被 過載 霧 includeusing namespace std template 函式模板 t max t a,t b,t c int main 內建函式是在編譯時,將所呼叫函式的 嵌入到 主函式中。inline int ma...

《C 程式設計教程》 C 對C語言的擴充

c 型別轉換符一共有四種 static cast expression const cast expression dynamic cast expression reinterpret cast expression 1 static cast 最常用的型別轉換操作符,它主要執行非多型的轉換,用於...

物件導向語言三大特性(c )

封裝即通過類將物件的屬性以及方法結合起來,僅對外提供介面。封裝的好處 繼承 不同繼承方式下派生類的繼承模型,分為共有繼承和私有繼承兩種。公有繼承 理解 共有繼承體現 是乙個 含義。公有繼承中對基類所適用的任何東西,也都適用於派生類。如 雖然正方形是特殊的矩形,但是物件改變時,長方形長寬不需要同時變而...