1. 程式人生 > >C++筆記1

C++筆記1

文章目錄

一、概述

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++ [編譯選項] 原始檔名
編譯選項 含義
-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( )把中文括起來