c++關於new、delete,缺省函數,內聯函數,函數重載的複習整理

c++關於new、delete,缺省函數,內聯函數,函數重載的複習整理

一、new和delete

在C語言中有開闢空間和釋放空間的函數:

1.(void*)malloc(size)
2.free();

在c++中的new和delete的作用與他們相同,也是用來開闢內存和釋放內存,
new 用來動態分配內存,delete 用來釋放內存

第一種用法:

int *p = new int;  //分配1個int型的內存空間
delete p;  //釋放內存

new 操作符會根據後面的數據類型來推斷所需空間的大小。

第二種用法:

int *p = new int10;  //分配1個int型的內存空間,並給p賦值
delete p;  //釋放內存

在括號內的數直接賦值給開闢了空間的p指針。

第三種用法:

int *p = new int[10];  //分配10個int型的內存空間
delete [] p;

在new[]內的數爲所要開闢空間的個數。
用 new[] 分配的內存需要用 delete[] 釋放,它們是一一對應的。

new 所申請的內存在堆區,應該手動釋放,否則只能等到程序運行結束由操作系統回收。爲了避免內存泄露,我們應該養成 new 和 delete、new[] 和 delete[] 操作符成對書寫的習慣。

二、缺省函數

在c++中缺省函數是指在函數的形參位置,爲形參初始化。

void fun(int a,int b=20,int c=10)
{
  cout<<a<<b<<c<<endl;
}
int main()
{
int a=10,b=20,c=30;
fun(10);
return 0;
}

在函數中爲形參初始化,若在傳參時不將實參傳遞到已經初始化的形參位置,則在調用時,自動調用已經初始化的形參的值,所以上面最後輸出爲:10、20、10,
若是在傳參是將實參傳入,則優先調用實參的值。
缺省函數的形參,初始化應該由右到左的初始化,不能跳過。
假設已經爲a初始化,則b,c都應該初始化;若b初始化,則c也應該初始化。

三、內聯函數

內聯函數類似於宏替換,開闢一個空間,保存相應的函數,在調用時可直接拿去使用,比較起調用函數的過程,內聯函數要快很多,這是一種犧牲空間換取時間的函數。

inline void fun(int a,int b=20,int c=10)
{
  cout<<a<<b<<c<<endl;
}
int main()
{
int a=10,b=20,c=30;
fun(10);
return 0;
}

可以看出與函數的區別就是在函數定義的開頭加上了inline,代表着這個函數爲內聯函數。

四、函數重載(Function Overloading)

在C++中,C++ 允許多個函數擁有相同的名字,只要它們的參數列表不同就可以,這就是函數重載。藉助重載,一個函數名可以有多種用途。

想要構建函數重載,可以有多種方法:改變參數的類型、改變參數的個數和改變參數的順序返回值類型不同的話不可以做爲判斷函數重載的標準。

void fun(int a,int b)
{
  cout<<a<<b<<endl;
}
void fun(char a,char b)
{
  cout<<a<<b<<endl;
}
void fun(double a)
{
  cout<<a<<endl;
}
int main()
{
int a=10,b=20,c=30;
fun(10);
return 0;
}

函數重載就是在一個作用範圍內(同一個類、同一個命名空間等)有多個名稱相同但參數不同的函數。重載的結果是讓一個函數名擁有了多種用途,使得命名更加方便,調用更加靈活。
但要注意的是,使用函數重載應該讓兩個或多個重載函數所作的功能相似,以免讓自己或別人後期處理起來,對兩個不相干的重載函數難以理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章