1.C++的數據類型ios
基本數據類型:char,int,float,double,void,bool數組
非基本數據類型:數組,指針,結構體,聯合,枚舉,類ide
2.C++的命名空間函數
a.命名空間:定義了某些標識符的做用域,使得咱們在使用同名全局變量時不發生衝突spa
eg:指針
#include<iostream> using namespace std;//使用標準命名空間 int main() { cout<<"hello poppy!"<<endl; return 0; } //在此程序裏咱們也能夠不使用命名空間來調用cout和endl #include<iostream> int main() { std::cout<<"hello poppy!"<<std::endl; return 0; }
tips: "::"是做用域解析符,此處使用"::"惟一的標識了cout和endl隸屬於std這個命名空間對象
b.自定義的命名空間ip
在C++程序中,咱們不只能夠使用標準的命名空間,也能夠使用咱們自定義的命名空間內存
而自定義的命名空間的靈活性更大作用域
eg:
#include<iostream> using namespace std; namespace myname { int a=10; } namespace Myname { int b=20; } namespace myname { int c=30; } using namespace myname; using namespace Myname; int main() { cout<<a<<endl; cout<<b<<endl; cout<<c<<endl; return 0; } /*輸出結果:10 20 30 */
從上面程序能夠看出命名空間能夠拆分開來定義,咱們在使用某個命名空間中所定義的 成員以前必須使用using namespace …… 或者 ……::
3.函數的重載
什麼叫作函數的重載?
函數的重載容許咱們定義多個相同函數名但參數列表不一樣的函數
eg: #include<iostream> using namespace std; int add(int a,int b) { return a+b; } float add(float a,float b) { return a+b; } int main() { int num1 = 2; int num2 = 3; float num3 = 2.2; float num4 = 4.3; int ret1 = add(num1,num2); float ret2 = add(num3,num4); cout<<ret1<<endl<<ret2<<endl; return 0; }
輸出結果:5
6.5
從上面程序咱們能夠分析出在咱們調用函數時,不須要考慮調用的是什麼函數,而由編譯器在 根據參數列表
對函數進行重命名以後,根據咱們所傳的實參類型來判斷應該使用哪一個函數,因此重載函數的 參數列表必須不一樣
不然,編譯器將沒法決定應該調用哪一個函數!
4.缺省參數
在C++程序中,咱們容許在函數具備默認參數時缺省實參的形式,缺省參數又分爲全缺省和部分缺省
a.全缺省參數
eg:
int add(int a = 1,int b = 2) { return a + b; } int main() { cout<<add()<<endl; cout<<add(2)<<endl; cout<<add(2,3)<<endl; return 0; }
輸出結果:3
4
5
觀察結果,咱們不難發現,當咱們沒有傳參時函數默認使用 1,2做爲參數,當咱們傳一個參數 時,咱們實際上覆蓋了a的默認值,而當咱們傳2個參數時,函數使用咱們所傳參數做爲實參。
b.部分缺省參數
eg:
int add(int a ,int b = 2) { return a + b; } int main() { cout<<add(3)<<endl; cout<<add(3,4)<<endl; return 0; }
輸出結果:5
7
同全缺省參數,部分缺省參數也容許咱們在函數提供默認參數時使用它的默認參數而不從新傳
值得注意的是,函數的默認參數必須連續地出如今參數列表的右邊,由於參數的覆蓋老是從左 往右進行的!
5.引用
a.引用的定義
引用相似於咱們給變量起了一個別名。
eg:
int m = 3; int &n = m; //此時n的值就是3,它們的內容相同,存放地址也相同
b.引用和指針
指針 | 引用 |
能夠爲NULL | 必須爲有效值 |
能夠隨時改變所指向的對象 | 在建立時肯定,引用的對象永不改變 |
sizeof肯定的大小永遠肯定 |
sizeof肯定引用的對象的大小 |
「++」「--」指針發生偏移 |
「++」「--」引用對象的內容改變 |
保存了所指向對象的地址 | 引用即原來的變量的別名 |
c.函數的引用調用
eg:
void swap(int &a,int &b) { int tmp = a; a = b; b = tmp; } //此程序能夠成功的交換兩實參的內容
經過上面的程序能夠看出引用調用爲咱們提供了很多便利之處,它使咱們的程序更加的簡潔
又可以實現和指針相同的效果而避免許多指針存在的問題
tips:函數的返回值也能夠是引用,但你必須保證當你返回了一個臨時變量的引用時必須用一個
已經建立好的變量來接收他。但一般咱們不建議返回一個臨時變量的引用。
d.const引用
eg:
int m = 10; const int &n=m; n = 20;//該賦值語句將不會經過編譯
請始終記得在C++裏const被嚴格的定義爲readonly 請不要試圖改變由const修飾的值
咱們經常使用 const 引用來保護函數中不容許被改變的參數
eg: void func(const int &a)
此時a的值不容許被改變
臨時變量的引用需加const修飾
eg:
double d = 3.14; const int &k=d; //若是必須引用一個臨時變量請務必加上const修飾
若是此時咱們查看內存就會發現k和d並不存儲於同一位置,由於k引用知識d在轉化時 生成的一個臨時變量而非d自己
tips:引用常量必須加上const
eg:
int &a = 5;//編譯不能經過 const int &a = 5;//正確