set ts=2;//設置tab鍵為2空格;
puts("");//換行
c++:
擴展名:.cpp,.C,.cc,.cxx
namespace 名字{
變量聲明、變量定義、函數聲明、函數定義。。。。
}
多個相同的命名空間會合并在一起。
命名空間可以嵌套命名空間。
使用:命名空間::內部的名字。
匿名名字空間(全局名字空間):可以直接使用。
輸入輸出:在寫程序時不需要考慮類型。
c與c++:
結構、聯合、枚舉。
定義完畢之后得到的是自定義類型。
c++中:
定義結構什么的不用重復struct、union、enum。
結構定義時,成員不單是數據還可以是函數。
支持匿名聯合。union{
int x;
char y[];
}
輸出顯示十六進制:cout<<hex<<x<<endl;
枚舉類型不再等同于整數類型,如果需要轉化可以強制類型轉換。
c中void*類型與其他類型相通;
c++中void*不能賦值其他類型。
類型轉換:c++不提倡強制類型轉換,如果確實需要,c++提供另外4種:
static_case<類型>(數據)用于數值類型之間以及void*和別的*類型之間;
reinterpret_case<類型>(數據)用于數值類型與地址類型或地址與地址之間
const_cast<T*>(T常量的地址)去掉對地址所指向的目標的const限制。
dynamic_cast
函數:1.C語言中默認返回int類型,c++作廢;
2.c中空參數說明參數個數隨意,c++中表示無參,所依函數調用前必須聲明或定義。
3.重載:C++允許多個函數同名,但要求形參參數表不同。
聲明和定義分開時,形參默認值放到聲明中。
內聯函數,用inline表示。內聯函數會在調用的地方展開函數代碼而不是產生調用,跟宏函數一樣高效,但卻有明確的參數類型而且沒有副作用。
內存管理:
c:malloc/free/calloc/realloc(已分配的內存調整大小),返回void*,
c++(堆里面分配內存)用new 類型 或 new 類型[元素個數] ,
delete 地址 delete[] 地址
或 new (指定地址)類型(很少用)。
new失敗會throw拋出異常導致程序終止,可以用nothrow來使其像c語言一樣返回NULL,加頭文件<new>
古怪的關鍵字
and &&; or ||; not !; and_eq &=; or_eq |=; not_eq !=; bitand &; bitor |; xor ^; compl ~;xor_eq ^=
引用:本質上是指針,編譯器自動取地址加星號。
定義:類型& 名字=初始值;引用必須初始化,用誰初始化它就和誰是同一體
形參在調用時用實參來初始化。
c與c++:
c語言中字符串會遇到長度定義和末尾忘記‘\0’出現亂碼。
c++用string類型,頭文件string,支持字符數組下表訪問元素,支持+ =各種比較運算,不用考慮空間問題,函數size()和length()都可以取字符串長度,成員函數c_str()可以返回對應的c風格字符串。
數組:c數組長度一旦確定就不變,作為參數傳遞就會蛻變為地址無法知道長度,必須追加長度。
c++用vector<類型>數組名(長度,元素初始值),通過resize(長度)來調整大小
size()來取得元素個數。頭文件<vector>
|