C++相對C的進化
C++完全相容C,並對C做了增強。
型別增強
- 型別檢查更加嚴格
int main()
{
const int a=10;
//把const型別指標賦值給非const型別指標,在C中是可以的,在C++中是不可以的。
// int *p=&a;
const int *pb=&a;
return 0;
}
- 增加布林型別
int main()
{
//C中使用0和非0來表示,C++中增加了具體的布林型別
bool flag=true;
if(!flag)
{
cout<<"flag is false"<<endl;
}
else
{
cout<<"flag is true"<<endl;
}
return 0;
}
- 真正的列舉
enum Season
{
spring=10, summer, autumn, winter
};
int main()
{
//定義列舉物件,無需使用enum,C需要使用enum Season s;來進行定義。
Season s;
s=summer;
cout<<"s= "<<s<<endl;
//C中的列舉本質就是整型,可以賦值任何整型值;C++中只能使用列舉的元素
// s=100;
return 0;
}
列舉的另一個作用:可以代替巨集,C++中儘量不使用巨集。
表示式可以賦值
int main()
{
int a=10;
int b=20;
//C++中表示式可以賦值,C中不可以
(a=b)=100;
cout<<"a= "<<a<<", b= "<<b<<endl;
//a=100, b=20
}
輸入和輸出
cin和cout是C++中標準的輸入流和輸出流,是類物件。
- cin:標準輸入
- cout:標準輸出
- cerr:標準錯誤輸出
- clog:cerr快取輸出
int main()
{
char name[10];
//C的方式,舊版本的會出現超過長度的異常,新版本修復了
//C設計是開放的,需要自己去處理異常
// scanf("%s", name);
//C使用這個方式處理異常
fgets(name, 10, stdin);
//使用string,不用考慮溢位的問題
cout<<"name= "<<name<<endl;
return 0;
}
格式化
c中printf提供了強大的格式化工具,cout也同樣可以,但略複雜。
int main()
{
//取消無用程式碼
#if 0
int a=12345;
double b=12.345678;
cout<<"xxxxxxxxxxxxxxxxxxxxx"<<endl;
//設定輸出內容佔位長度
cout<<setw(8)<<a<<endl;
cout<<setw(8)<<setfill('0')<<a<<endl;
//設定對齊方式
cout<<setw(8)<<setiosflags(ios::left)<<a<<endl;
//設定表示數值有效位數
cout<<setw(8)<<setprecision(1)<<b<<endl;
//設定小數位數
cout<<setw(8)<<setprecision(4)<<setiosflags(ios::fixed)<<b<<endl;
#endif
int a=10;
//不同進位制輸出
cout<<hex<<a<<endl;
cout<<oct<<a<<endl;
cout<<dec<<a<<endl;
//測試輸出00:00:00格式時間
a=5;
cout<<setfill('0')<<setw(2)<<a<<":"<<setw(2)<<a<<":"<<setw(2)<<a<<endl;
return 0;
}
C++支援函式過載
- 過載規則:
- 函式名相同
- 引數個數不同。
- 引數型別不同。
- 引數順序不同。
- 返回值型別不同不構成重構。(原因:有時候我們不使用返回值,所以不能作為判斷依據)
- 匹配原則:
- 嚴格匹配,找到就會呼叫。
- 通過隱式轉換,進行呼叫,要防止二義性。(不要讓程式自己去做判斷)
- 過載底層實現
- name mangling--傾扎技術。
- 根據引數型別來修改函式名。
- C++才有傾軋,C中不存在。
- C++為呼叫C中函式,需要使用 extern "C"{}
- 支援操作符過載。
預設引數
- 從左向右,中間不能跳躍。
- 實參格式+預設引數個數>=形參個數。
相關文章
- c++ 讓你的應用支援相對路徑C++
- 【C++】C++的位元組對齊C++
- 通過JNI對C++進行封裝C++封裝
- C++相關資源C++
- 一張C/C++檔案io相關函式mode對應表C++函式
- 對拍(C++)C++
- C++ 對拍C++
- 【C/C++】 C++暫存器優化C++優化
- QT/c++相關記錄QTC++
- c/c++ 位元組對齊C++
- c++對拍程式C++
- C++ 對C的擴充套件有哪些C++套件
- C++學習筆記-C++對C語言的函式擴充C++筆記C語言函式
- C++ 3/5 法則相關C++
- c++的進位制轉換C++
- 1161:轉進位制(C C++)C++
- C++進階(雜湊)C++
- C++ 位元組對齊C++
- C++精進之路4:引用的用法C++
- c/c++資料對齊問題C++
- C++對C語言的擴充套件(1)--引用C++C語言套件
- 【C++】“反轉連結串列”相關的題目C++
- Python 和 c++/c/java 對於負數的儲存方式對比PythonC++Java
- C++ Primer 查漏補缺 —— C++ 中的各種初始化C++
- C++進階(智慧指標)C++指標
- C++整理3_過載及其相關C++
- C/C++結構體對齊測試C++結構體
- C/C++記憶體對齊原則C++記憶體
- C/C++記憶體對齊詳解C++記憶體
- Go 與 C++ 的對比和比較GoC++
- 使用 Visual C++ 的 Office 自動化C++
- C/C++ 效能優化背後的方法論:TMAMC++優化
- C#模擬C++模板特化對型別的值的支援C#C++型別
- Python和Java、PHP、C、C#、C++等其他語言的對比?PythonJavaPHPC#C++
- C++在C的基礎上改進了哪些細節C++
- C/C++ Qt StringListModel 字串列表對映元件C++QT字串元件
- c++任意變數型別獲取相關C++變數型別
- 任意進位制下的可逆素數 C++C++