c++入门基础知识
剛開始接觸c++,我們會發現與C語言相比不光頭文件有所不同,還會發現using namespce std;這句話,其實這就是c++的命名空間。?
(1) 概念 ?
命名空間是為了防止名字沖突提供更加可控的機制。命名空間分割了全局命名空間,其中每一個命名空間是一個作用域。由三部分組成,分別是namespace、空間名字和一系列由花括號括起來的聲明和定義。?
(2) 作用 ?
是建立一些互相分隔的作用域,把一些全局實體分隔開來。?
(3) 例子 ?
命名空間和類就好比是文件夾和文件的關系。命名空間就像是文件夾,它包含了若干個文件,這樣可以將定義的很多類整齊地擺放起來,不僅可以避免命名沖突,還可以簡化對類成員的訪問。用花括號把文件的一部分括起來, 并以關鍵字namespace開頭給它?
起一個名字: namespace name1 { int a = 0; } namespace name2 { int a = 1; } name1: : a = 3; name2: : a = 4; ::是作用域解析符 (4) 優點 ?
如果在程序一開始不寫上using namespace std;那么每次使用時就要這樣寫,這樣顯然比較麻煩。?
注:endl相當于c語言中的\n.
#include<iostream> //using namespace std; int main() {std::cout<<"hello world"<<std::endl;cout<<"hello world"<<endl;return 0; } (5) 嵌套使用 #include<iostream> using namespace std; namespace you {int a=1;namespace me{int a=2;} } int main() {cout <<you::me::a << endl; return 0; }輸入輸出流
流:數據之間的傳輸操作。?
輸入輸出操作是由istream輸入流和ostream輸出流提供的,iostream是從這兩個類中派生的,允許雙向輸入和輸出。這個庫定義了3個標準流對象。?
(1)cin:標準輸入的istream類對象,使用戶能夠從終端讀數據,默認是鍵盤。> > 是輸入操作符。?
(2)cout:標準輸出的ostream類對象,使用戶能夠從終端寫數據,默認是屏幕。< < 是輸出操作符。?
(3)cerr:標準輸出的ostream類對象,cerr輸出程序錯誤,默認是屏幕。
重載
(1)概念
所謂重載,其實就是“一物多用”。?
函數重載,即在同一作用域類, 一組函數的函數名相同, 參數列表不同( 個數不同/類型不同) ,返回值可同可不同。不僅函數可以重載,運算符也可以重載,例如,運算符”<<”和”>>”既可以作為位移運算符,又可以作為輸入操作符和輸出操作符。
(2)原因
那么,為什么C++支持重載呢?其原因在于函數名的修飾規則。從代碼的編譯到運行,在VC6.0或VS這種編譯器下,它是系統直接完成了翻譯與鏈接,直接生成了運行結果。?
編譯器內部完成了翻譯部分:?
1.預處理?
2.編譯過程:將高級語言轉為匯編語言。?
3.匯編過程:匯編語言轉為二進制程序,生成目標文件。?
4.鏈接部分:所引用的數據鏈接進來,形成可執行程序。?
比如一個函數的聲明如下:?
void function(int x,int y);?
在c語言中,編譯器在編譯后在庫中的名字為_function?
在c++中,編譯器在編譯后在庫中的名字為_function_int_int,在鏈接時是找名字進行鏈接,由于C++中它們的名字不一樣,所以就不會報錯。?
(3)規則
① 函數名要相同;?
② 參數個數不同,參數類型不同,參數順序不同,均可構成重載;?
③ 返回值類型不同則不可以構成重載。
C++缺省參數
(1)概念:在函數聲明或定義的時候給形參一個默認的參數。這樣在調用該函數,如果沒有給實參,函數的這個形參就默認為這個值。
// 全缺省參數 int Add1 (int a = 0, int b = 0) { return a + b; } //半缺省參數 int Add2 (int a, int b = 0) { return a + b; }int main() { count<<Add(1,2)<<endl;//此處用默認的(1,2) count<<Add()<<endl;//不傳值時默認用缺省的(0,0) return 0; }(2)使用規則
缺省參數賦值必須要連續且從右向左賦值;?
不能把const的全局變量作為缺省值;?
缺省值必須是常量;?
調用時你只能從最后一個參數開始進行省略;
指針和引用
指針?
學習C語言時已經知道,每一個數據都是有地址的,通過地址就可以找到所需的內存空間。?
(1)概念:一個變量的地址稱為該變量的指針。?
(2)使用方法:基類型 * 指針變量名
指針的作用和特點前面已經有了深入學習,在這里不再加以詳細介紹。
引用
(1)概念:引用不是定義一個新的變量, 而是給一個已經定義的變量重新起一個別名。?
(2)使用方法:類型 &引用變量名 = 已定義過的變量名.
*const引用* int main() {const int a=10;//a被const修飾,它的值就不能再被改變int &b=a;//編譯不能通過const int &b=a;//此處可以通過,a的值改變b的值也會改變const int &b=5; // 常量具有常性, 只有常引 用可以引 用常量 }
*不同類型變量間的引用* int main() {int a=20;double b=30.123;int &c=b;//不能通過const int &c=b;//編譯可以通過,原因見下圖 }
?
想要用int類型的c來引用double型的b,首先先會將b變量放入一個int類型臨時變量,再用const int類型的c來引用這個臨時變量,臨時變量具有常屬性,所以就需要有一個const int類型的名字來完成這個引用。
(3)特點:?
1. 一個變量可取多個別名?
2. 引用必須初始化?
3. 引用只能在初始化的時候引用一次, 不能改變為再引用其他的變量。
(4)作用
1.做參數
1.做參數#include<iostream> using namespace std; void swap(int&a,int&b) {int c=a;a=b;b=c; } int main() {int x1=10;int x2=20;cout<<x1<<" "<<x2<<endl;swap(x1,x2);cout<<x1<<" "<<x2<<endl; }2.做返回值
#include<iostream> using namespace std; int red; int &Add(int t1,int t2) {int ret=t1+t2;return ret; } void main() {int a=2,b=3;int &c=Add(a,b);cout<<c<<endl; }指針和引用的區別
(1)指針是存儲另一個對象的地址的變量,而引用是對象的別名。?
(2)指針未被初始化或被刪除時,應將NULL賦給它,但引用不能為空。?
(3)sizeof指針對象和引用對象的意義不一樣,sizeof引用是指向變量的大小,sizeof指針是指對象地址的大小。?
(4)引用只能在定義時初始化一次, 之后不能改變指向其它變量( 從一而終), 指針變量的值可。?
(5) 指針和引用自增(++)自減(–)意義不一樣。?
(6) 相對而言, 引用比指針更安全。
總結
- 上一篇: SSR
- 下一篇: 如何让new操作符只构造,不申请内存