C++學習筆記01
阿新 • • 發佈:2018-08-04
階段 大成 遇到 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;
- 三目運算符作為左值,那麽返回值不能有常量;
- C語言中可以通過指針的間接賦值改變所謂的const變量;而C++中不能通過指針間接改變const變量的值
- 在C++中const修飾的常量必須初始化;
- 當對const常量取地址時,會臨時在棧上開辟一個臨時空間,這個變量是匿名的,將匿名的地址賦給指針p;但*p改變的是臨時的變量,並不能改變const常量
- C語言中的const並不合適一個常量,是一個變量加了只讀屬性而已;而C++中的const是個真正的常量;
- define和const變量在編譯的階段不一樣,define是預處理器,const是編譯器;
- define沒有區域的區分,而const完全符合編譯器的邏輯判斷,有作用區域劃分;
- C語言對枚舉的賦值,可以通過枚舉的值,直接賦值;
C++學習筆記01