C++筆記1
阿新 • • 發佈:2018-12-18
文章目錄
一、概述
C++是一種靜態資料型別檢查的、支援多種程式設計正規化(面向過程與面向物件等)的通用程式設計語言。
1、應用
C++在某些領域(比如,作業系統程式設計、遊戲開發、電信金融業務、伺服器端開發等)仍具有不可替代的優勢。
2、重點
- C子語言——C++支援幾乎全部的C語言功能,在語法上與C語言僅有細微的差別;
- 面向物件的C++——類,封裝、繼承和多型;
- 泛型程式語言——可以編寫完全一般化並可重複使用的演算法,其效率與針對特定資料型別而設計的演算法的效率相近。
- STL——將容納資料的容器、訪問資料的迭代器、以及對資料進行處理的演算法非常優雅地整合在一起,其效率雖然比專門設計的C++程式碼稍低,但其安全性與規範性大受歡迎,在業界得到了廣泛的應用
3、程式
C++程式=預編譯指令+程式程式碼+註釋
cpp檔案執行的過程
- 編譯:通過編譯器將 原始檔(.cpp) ==》目標檔案(.obj)
- 連結:通過連結器將 目標檔案(.obj)+標準庫目標檔案(.lib) ==》可執行檔案(.exe)
程式 = 資料結構(描述資料) + 演算法(處理資料)
tip1:
當我們在Visual Studio中執行某個程式時,如果這個程式在執行過程中不需要與使用者進行互動,那麼它執行時開啟的DOS視窗會在其執行完畢後立即關閉。如果這個程式有結果輸出,我們甚至來不及看清程式的輸出結果。一個程式執行完了,連輸出結果都來不及看清這怎麼行呢?
==》解決方法:在程式的主函式返回之前加上一條“system(“pause”);”
int main()
{
// …
// 讓程式在結束之前暫停
system("pause");
return 0;
}
4、IDE(整合開發環境,Integrated Development Environment)
一般包括程式碼編輯器、編譯器、偵錯程式和圖形使用者介面工具等,是集程式碼編寫功能、分析功能、編譯功能、除錯功能於一體的開發軟體套裝。
- Windows:VS、Qt
- Linux/UNIX:vi(編寫原始碼)+GCC(編譯)+GDB(除錯)
- gcc 常用操作:
- 格式:g++ [編譯選項] 原始檔名
- gcc 常用操作:
編譯選項 | 含義 |
---|---|
-c | 只編譯,而不連結成為可執行檔案。編譯器將輸入的.cpp原始碼檔案編譯生成以.o為字尾的目標檔案 |
-o 輸出檔名 | 指定輸出檔案的名稱。若不指定,則生成預設的可執行檔案:Windows——a.exe、Linux/UNIX——a.out |
-g | 若要對原始碼除錯必選——用於產生除錯工具(例如,GDB )所必需的符號資訊 |
-O | 編譯器將對程式進行優化編譯、連結。可提高可執行檔案的執行效率,但編譯、連結的速度相應變慢 |
-I 目錄名 | 指定GCC的附加標頭檔案目錄。在使用第三方庫時常用 |
// 將HelloWorld.cpp這個C++原始檔優化編譯
// 並連結成了一個可執行檔案 HelloWorld
g++ -O -o HelloWorld HelloWorld.cpp
// 執行
./HelloWorld
二、基本語法
1、輸入、輸出
流(stream):在C++程式中,我們將這種資料在程式和外部物件(鍵盤、螢幕等)之間的流動。
C++標準庫中已經預先定義了4個最基本的輸入/輸出流(I/O)物件:
- cin——通過提取(get-from)符“>>”從cin中提取使用者通過 鍵盤輸入的資料;
- cout——通過插入(put-to)符“<<”向cout中插入程式內的資料;
- cerr——輸出程式錯誤資訊;
- clog——輸出日誌資訊;
注:箭頭的方向形象地代表了資料流動的方向;
2、輸出格式控制
操縱符大都定義在標頭檔案中。
操 縱 符 | 作 用 |
---|---|
dec | 十進位制顯示數值資料(預設設定) |
hex | 十六進位制顯示數值資料。如果同時在輸出流中插入一個showbase操縱符,還可以同時輸出十六進位制數值的0x字首 |
oct | 八進位制顯示數值資料 |
endl | 插入換行符,並重新整理輸出流緩衝區 |
setprecision(n) | 設定浮點數的輸出精度為n。預設情況:浮點數中小數點前後所有數字的個數。fixed操縱符:設定小數點後的數字的個數 |
setw(n) | 設定輸出的每個資料的顯示寬度 |
// fixed操縱符:固定的小數位數輸出小數數值。
// setprecision()設定保留的小數點後有效數字位數,
// 可得“保留小數點後兩位有效數字”的輸出格式
cout<<fixed<<setprecision(2)<<1.23456<<endl;
==》輸出:1.23
3、讀/寫檔案
- 標頭檔案:
- ifstream(input file stream):從檔案中讀取資料;
- ofstream(output file stream)將資料輸出到檔案;
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
int nYear, nMonth, nDate;
// 建立輸入檔案流物件fin,並嘗試開啟Data.txt檔案
ifstream fin("Date.txt");
if(fin.is_open())
{
// 用提取符“>>”從檔案輸入流物件fin中讀取檔案中的資料
fin>>nYear>>nMonth>>nDate;
cout<<"檔案中記錄的日期是:"<<nYear<<"-"<<nMonth<<"-"<<nDate<<endl;
fin.close();
}
else {
cout<<"無法開啟檔案並進行讀取"<<endl;
}
cout<<"請輸入新日期(例如:1995 5 5):"<<endl;
cin>>nYear>>nMonth>>nDate;
// 建立輸出檔案流物件fout,並嘗試開啟Data.txt檔案,
// 如果這個檔案不存在,則建立一個新檔案並開啟
ofstream fout("Date.txt");
if(fout.is_open())
{
fout<<nYear<<" "<<nMonth<<" "<<nDate;
fout.close();
}
else
{
cout<<"無法開啟並進行寫入"<<endl;
}
return 0;
}
出現的問題:
- qt creator——“error c2001: 常量中有換行符”
- 解決方案
- 將報錯的那個原始檔在記事本中開啟,然後儲存一下。==》不報錯
- 若中文全是亂碼,把中文用QStringLiteral( )把中文括起來