標準C++(1)
一、引用
引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣。
引用的聲明方法:類型標識符 &引用名=目標變量名;
例: int& num;
引用類似於起別名
註意:
(1)&在此不是求地址運算,而是起標識作用。
(2)類型標識符是指目標變量的類型。
(3)聲明引用時,必須同時對其進行初始化。
(4)引用聲明完畢後,相當於目標變量名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變量名的別名。
(5)引用也可以當作函數的返回值,但絕不能返回一個局部變量的引用。
(6)引用可以當作函數的參數,它引用的對象就是函數的實參。引用可以達到指針的效果。
(7)引用不光可以引用標識符,也可以引用立即數,但必須加const屬性
二、C++的內存管理運算符
在C++中使用 new/delete 來管理內存,new 用來申請內存,delete 用來釋放內存。
具體用法如下:
#incldue <iostream> class Student { char name[20]; char sex; short; }; int main() { Student *stu = new Student; delete stu; }
使用 new 創建結構對象時,會自動調用構造函數,delete 時會自動調用析構函數
【例】 Student* stu = new Student("hehe");
[]可以配合new和delete申請或釋放數組。new[] 不可與delete混用,必須使用delete[]釋放
int* p = new int[10]{1,2,3,4,5,6,7,8,9,10}; delete[] stu;
三、C++的函數
C++中函數可以在main函數前執行
C++具有函數重載的功能
可以使用同一個函數名,定義多個參數不同(返回值可以不同,前提是參數不同)的函數。
C++中函數的參數可以有默認值,
1、函數的默認參數必須靠右。
2、默認參數要盡量少用,因為可能會引起重載錯誤
3、默認參數是編譯器在編譯時幫助賦值的,所以只能由全局變量、靜態變量、字面值對參數進行賦值。
int func(int num1= 100,char* name = "abcd") { } void func(char ch,short num) { }
四、名字空間
C++引用了名字空間的機制。
名字空間:把全局的命名空間進一步分割。可以創建出一個個獨立的命名空間防止相互之間命名沖突
1、名字空間的定義
namespace name { //變量; //函數; //結構、類; }
2、名字空間的合並
a、同名的命名空間會自動合並
b、在同一個名字空間中標識符必須是唯一的
3、定義與聲明分開
namespace n1 { //在名字空間中聲明函數 void func(void); } //在名字空間外定義函數 void n1::func(void) {}
4、如何使用名字空間中的內容
a、域限定符(::),直接使用,名字空間::標識符。【例】 ni::func();
b、using namespace 名字空間; 功能是把名字空間中的標識符
c、using 名字空間::標識符 ,表示此標識符對後面的代碼公開。
5、名字空間的嵌套
名字空間可以嵌套,但使用時要逐層解析。 n1::n2::n3::num
namespace n1 { namespace n2 { namespace n3 { } } }
6、全局空間歸屬為匿名空間
在全局空間定義的標識符都屬於這個匿名空間,匿名空間默認開放。
如果函數中有同名的標識符把匿名空間中的屏蔽了,可以使用空的域限定符來表示他 ::變量名
標準C++(1)