1. 程式人生 > >C++學習筆記01

C++學習筆記01

階段 大成 遇到 bool 標準 not 內存 size 變更

命名空間 using namespace 引入整個命名空間 namespace表示命名空間的關鍵字類型;不同命名空間中的值不同; namespace A{ a =10; } namespace B{ a = 20; } std表示iostream裏的一個命名空間;如果想使用cout,endl這些標準輸出,一定要引入std命名空間; 示例程序如圖所示 #include <iostream> namespace A { int a = 10; } namespace B { int a = 20; namespace C { struct person { char name[20]; int age; }; } } int main(void) { std::cout<<"A::a = "<<A::a<<std::endl; std::cout<<"B::a = "<<B::a<<std::endl; B::C::person p1 = { "wang2", 20 }; std::cout<<"B::C::p1.age = "<<p1.age<<std::endl; return 0; } 運行結果如圖所示 技術分享圖片 技術分享圖片

面向行的輸入:cin.getline(); getline()函數將讀取整行,它通過使用通過回車鍵輸入的換行符來確認輸入結尾。其第一個參數用來存儲輸入行數組的名稱,第二個參數是要讀取的字符數。 getline()會將換行符替換成空字符。 面向行的輸入:cin.get(); get()函數的參數與getline()一致,不同的是,get()讀到行尾時遇到換行符時便不再讀取,並且把換行符留在隊列中,因此第二次讀取時遇到的第一個字符便是換行符,此時get認為已讀到行尾,而沒有發現可讀取的內容,利用不帶參數的get()可以讀取下一字符(即使是換行符) 解決辦法有如下: cin.get(name,SIZE); cin.get(); cin.get(another,SIZE); 或 cin.get(name,SIZE).get(); cin.get(another,SIZE).get(); cin.getline(name,size).getline(name2,size);將連續讀取兩行; cin讀取輸入時同樣也會將換行符留在隊列中,導致下一次讀取輸入無法進行,(cin>>xx).get()可以很好地解決這個問題; 小結 cin>>xx: 接受一個字符串,遇“空格”、“TAB”、“回車”都結束; cin.get(字符變量名):用來接受字符;即使時空格也會接收;返回一個對象,而不是讀取的字符 cin.get(字符數組名,接受字符數目):接收字符串,可以接收空格,會把換行符留在隊列中; cin.getline(字符數組名,接受字符數目):可以接收空格,遇換行符結束,並把換行符換成空字符; getline(cin,字符串名):需包含cstring頭文件,可以接收空格; C++對語言的增強
  • C++中定義結構體變量時可以不使用struct關鍵字;
  • 對函數傳參的檢驗能力更嚴格,以及對函數返回值進行嚴格檢查;
  • C++在C語?的基本類型系統之上增加了bool,C++中的bool可取的值只有true(1)和false(0), C++編譯器會在賦值時將?0值轉換為true, 0值轉換為false,只占一個字節;
  • 不管給bool類型負任何非零值,其值都為1;
對三目運算符的增強 int a = 10; int b = 20; (a < b? a:b) = 30;//此處取的是a的地址,等價於C語言中 *(a<b?&a,&b) = 30;
  • 三目運算符作為左值,那麽返回值不能有常量;
對const增強
  • C語言中可以通過指針的間接賦值改變所謂的const變量;而C++中不能通過指針間接改變const變量的值
  • 在C++中const修飾的常量必須初始化;
  • 當對const常量取地址時,會臨時在棧上開辟一個臨時空間,這個變量是匿名的,將匿名的地址賦給指針p;但*p改變的是臨時的變量,並不能改變const常量
  • C語言中的const並不合適一個常量,是一個變量加了只讀屬性而已;而C++中的const是個真正的常量;
const和#define的區別:
  • define和const變量在編譯的階段不一樣,define是預處理器,const是編譯器;
  • define沒有區域的區分,而const完全符合編譯器的邏輯判斷,有作用區域劃分;
對枚舉的增強
  • C語言對枚舉的賦值,可以通過枚舉的值,直接賦值;
C++字符串的輸入使用getline(cin,str); 共用體(union)是一種數據格式,能夠存儲不同的數據類型,但只能同時存儲其中的一種類型的值,因此公用體的長度為其最大成員長度。可以節省空間。 枚舉(enum) enum ok {red,yellow,boy,girl}; 作為枚舉常量,他們對應的值為0~3; 只能將定義枚舉時使用的枚舉量賦值給枚舉變量,枚舉量是整型,可以提升為int型,但int型不能自動轉換為枚舉類型; enum student{SPR,SUM,AUT,WIN}; student s = SPR; s = 1;//報錯C++中不允許,而C語言允許 s = WIN;//必須通過枚舉變量賦值; enum ok {red,yellow=9,boy=20,girl} red在默認情況下為0,後面沒有初始化的枚舉量將比前面的枚舉量大1.因此girl的值21; 每個枚舉都有取值範圍,通過強制類型轉換,可以將取值範圍中的任一個整數值賦給這個變量,即使這個值不是枚舉值。 C++中的引用 //C++提供了另一種對變量的間接操作,就是使用引用 int a = 10; int *p = &a; int &b = a;//定義了一個引用b指向a,b此時就是變量a的別名; b = 40;//此時a 的值也變成了40; a = 30;//此時b 的值也變成了30; 規則 1 引用沒有定義,是一種關系型聲明。聲明它和原有某一變量(實體)的關系。故 而類型與原類型保持一致,且不分配內存。與被引用的變量有相同的地址。 2 聲明引用的時候必須初始化,一經聲明,不可變更。 3 可對引用,再次引用。多次引用的結果,是某一變量具有多個別名。 4 &符號前有數據類型時,是引用。其它皆為取地址。

C++學習筆記01