C 基本概念 內聯,模板,函式

2021-10-02 17:05:26 字數 2811 閱讀 1482

1、inline function

嵌入到主調函式中的函式稱為內建函式(inline function),又稱內嵌函式,或內聯函式。指定內建函式,只需在函式首行的左端加乙個關鍵字inline即可。可以在宣告函式和定義函式時同時寫inline,也可以只在其中一處宣告inline,效果相同。內建函式中不能包括複雜的控制語句,如迴圈語句和switch語句,一般少於5句。 對函式作inline宣告,只是對編譯系統提出的乙個建議,編譯系統會根據具體情況決定是否這樣做。歸納起來,只有那些規模較小而又被頻繁呼叫的簡單函式,才適合於宣告為inline函式。

2、function overloading 

c++允許用同一函式名定義多個函式,這些函式的引數個數和引數型別不同。過載函式除了允許引數型別不同以外,還允許引數的個數不同。引數的個數和型別可以都不同。但不能只有函式的型別不同而引數的個數和型別相同,過載函式的引數個數、引數型別或引數順序3者中必須至少有一種不同,函式返回值型別可以相同也可以不同。

3、function template

所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。

template 返回型別 函式名(函式模型形參表)

函式體其中,class也可用typename代替:

template < typename t>  或  template 

#include "iostream"

using namespace std;

template 

t abs(t x)

return x<0? -x:x;

int main()

int n=5;

double d=-5.5;

cout以下為類模板(class template)定義:

template 《模板形參表》

class 類名

類模板體定義;

如template 

template 

模板類 《模板參數列》 物件名1,....物件名n。

如果模板類的成員函式在類外實現,則必須是模板函式。如:

template

t& array::operator(int index) ;                                   //類體

(4) 用類模板定義物件時用以下形式:

類模板名《實際型別名》  物件名;

類模板名《實際型別名》  物件名(實參表列);

如comparecmp;

comparecmp(3,7);

(5) 如果在類模板外定義成員函式,應寫成函式模板形式: 

template函式型別 類模板名《虛擬型別引數》∷成員函式名(函式形參表列) 

template

numtype compare∷max( )

說明: 

(1) 類模板的型別引數可以有乙個或多個,每個型別前面都必須加class,如

template

class someclass

在定義物件時分別代入實際的型別名,如

someclassobj;

(2) 和使用類一樣,使用類模板時要注意其作用域,只能在其有效作用域內用它定義物件。

(3) 模板可以有層次,乙個類模板可以作為基類,派生出派生模板類。

4、有預設引數的函式

如有一函式宣告(定義中)有float area(float r=6.5);//指定r的預設值為6.5

實參與形參的結合是從左至右順序進行的。因此指定預設值的引數必須放在形參表列中的最右端,否則出錯。

乙個函式不能既作為過載函式,又作為有預設引數的函式。因為當呼叫函式時如果少寫乙個引數,系統無法判定是利用過載函式還是利用預設引數的函式,出現二義性,系統無法執行

5、內部函式和外部函式

如果乙個函式只能被本檔案中其他函式所呼叫,它稱為內部函式。在定義內部函式時,在函式名和函式型別的前面加static。函式首部的一般格式為

static 型別識別符號 函式名(形參表)

如static int fun(int a,int b)內部函式又稱靜態(static)函式。

在定義函式時,如果在函式首部的最左端冠以關鍵字extern,則表示此函式是外部函式,可供其他檔案呼叫。如函式首部可以寫為extern int fun (int a, int b)

這樣,函式fun就可以為其他檔案呼叫。如果在定義函式時省略extern,則預設為外部函式。在需要呼叫此函式的檔案中,用extern宣告所用的函式是外部函式。

6、函式原型、預處理

用函式原型能夠把函式的作用域擴充套件到定義該函式的檔案之外(不必使用extern)。只要在使用該函式的每乙個檔案中包含該函式的函式原型即可。函式原型通知編譯系統:該函式在本檔案中稍後定義,或在另一檔案中定義。利用函式原型擴充套件函式作用域最常見的例子是#include命令的應用。

預處理命令是c++統一規定的,但是它不是c++語言本身的組成部分,不能直接對它們進行編譯。為了與一般c++語句相區別,這些命令以符號「#」開頭,而且末尾不包含分號。

c++提供的預處理功能主要有以下3種:

(1)  巨集定義

(2)  檔案包含

標頭檔案是原始檔之間的介面,新的c++標準庫中的標頭檔案一般不再包括字尾.h。

(3) 條件編譯

但是有時希望程式中某一部分內容只在滿足一定條件時才進行編譯,也就是指定對程式中的一部分內容進行編譯的條件。如果不滿足這個條件,就不編譯這部分內容。這就是「條件編譯」。

a] #ifdef 識別符號

程式段1

程式段2

#endif

b]#if 表示式

程式段1

#else

程式段2

#endif

基本概念 C 基本概念

由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...

c 基本概念

1程式設計基礎1.1 基本概念 1.const 的理解 const char char const char const的區別問題幾乎是c 面試中每次都會有的題目。事實上這個概念誰都有只是三種宣告方式非常相似很容易記混。bjarne在他的the c programming language裡面給出過...

c基本概念

程式 計算機能識別和執行的指令,由各種函式組成。c面向過程,可直接操作硬體。pwd 當前工作目錄 cd 不加引數 進root cd folder 進入資料夾 cd 上級目錄 cd 返回root cd 返回上乙個訪問的目錄 rm 檔名 刪除 cat 檔名 less 在終端下檢視檔案 ls 列出目錄下所...