第2章 開始學習C++

来源:https://www.cnblogs.com/young520/archive/2022/07/18/16492357.html
-Advertisement-
Play Games

看《C++ Primer Plus》時整理的學習筆記,部分內容完全摘抄自《C++ Primer Plus》(第6版)中文版,Stephen Prata 著,張海龍 袁國忠譯。只做學習記錄用途。 ...


說明

看《C++ Primer Plus》時整理的學習筆記,部分內容完全摘抄自《C++ Primer Plus》(第6版)中文版,Stephen Prata 著,張海龍 袁國忠譯。只做學習記錄用途。

目錄

2.1 進入C++

2.1.1 main() 函數

如下幾行代碼構成了函數定義,該定義由兩部分組成:第一行 int main()函數頭,花括弧中包括的部分叫函數體。函數頭對函數與程式其他部分之間的介面進行了總結;函數體是指出函數應做什麼的電腦指令。每條完整的指令都稱為語句,所有語句都以分號結束。main() 被啟動代碼調用,啟動代碼是程式和操作系統之間的橋梁,在運行獨立的 C++ 程式時,通常從 main() 函數開始執行。如果編譯器到達 main() 函數末尾時沒有遇到返回語句,則預設 return 0,這條隱含的返回語句只適用於 main() 函數,不適用於其他函數。操作系統根據 main() 函數的返回值來判斷程式是否存在問題,通常的約定是:退出值為零則意味著程式運行成功,為非零則意味著存在問題。

int main()
{
    statements;
    return 0;
}

2.1.2 C++ 註釋

註釋是程式員為讀者提供的說明,通常用於解釋代碼的用途,編譯器編譯時會忽略註釋。行註釋以雙斜杠 // 打頭,到行尾結束;塊註釋(也稱C-風格註釋)以 /* 開始,到 */ 結束,塊註釋可以跨越多行。

//我是行註釋,我只能待在雙斜杠兄弟的後面

/* 我是塊註釋,我可以在這一行
   也可以在這一行
   還可以在這一行,但我不能跑到它們的外面  */

2.1.3 C++ 預處理器

預處理器在程式進行主編譯之前對源文件進行處理。有些 C++ 實現使用翻譯器程式將 C++ 程式轉換為 C 程式,這裡的翻譯器也是一種預處理器,但通常所說的預處理器一般用來處理名稱以 # 開頭的編譯指令。不必執行任何特殊的操作來調用預處理器,它會在編譯程式時自動運行。下麵是一種典型的預處理器操作: #include 編譯指令導致 iostream 文件的內容隨源代碼文件的內容一起被髮送給編譯器。這個過程中,原始文件並沒有被修改,而是將源代碼文件和 iostream 組合成一個複合文件,編譯的下一階段將使用該文件。

#include <iostream> 	//一條預處理器指令

2.1.4 頭文件名

iostream 這樣的文件叫做包含文件(include file,由於它們被包含在其他文件中),也叫頭文件(header file,由於它們被包含在文件起始處)。C 語言的傳統是:頭文件使用擴展名 h。C++用法對老式 C 的頭文件保留了擴展名 h,對部分 C 頭文件去掉擴展名 h 併在文件名前加上首碼 c,純粹的 C++ 頭文件則沒有擴展名。

2.1.5 名稱空間

名稱空間支持是一項 C++ 特性。當使用兩個已封裝好的庫,但它們都包含一個同名函數時(例如 wanda() 函數),編譯器將不知道應該使用哪個版本。為此,可以將兩個庫函數的定義放在不同的名稱空間中,例如廠商 Microflop Industries 將他們定義的 wanda() 函數放入一個名為 Microflop 的名稱空間中,這樣,其 wanda() 函數的全稱為 Microflop::wanda() ;同樣,廠商 Piscine 的 wanda() 函數的全稱為 Piscine::wanda() 。這樣,程式就可以使用名稱空間來區分不同的版本了。

當使用某名稱空間中的類、函數或變數時,有三種方式:

  1. 使用 using 編譯指令 一次性導入名稱空間中定義的所有名稱,這是一種偷懶的做法,在大型項目中會存在潛在的問題;
  2. 使用 using 聲明 逐條導入所需的名稱;
  3. 使用 名稱空間名::名稱 的形式直接使用目標名稱空間中的類、函數或變數,例如 std::cout << "hello world"
//using編譯指令導入std名稱空間中的所有名稱
using namespace std;

//using聲明導入std名稱空間中的cout
using std::cout;

//using聲明導入std名稱空間中的endl 
using std::endl;

//using聲明導入std名稱空間中的cin
using std::cin;	

使用上述前兩種方式之一導入所需名稱後,便可以直接使用相應的名稱而不必加上名稱空間首碼。

2.1.6 使用 cout 進行 c++ 輸出

這裡涉及到運算符重載,詳見後面章節。 endl\n 都表示換行符,一個差別是 endl 確保程式繼續運行前刷新輸出(將其立即顯示在屏幕上),而 \n 不能提供這樣的保證,這意味著在有些系統中,有時可能在輸入信息後才會出現提示。

2.1.7 C++源代碼的格式化

在 C++ 中,回車的作用和空格或製表符相同,可以在能夠使用回車的地方使用空格,反之亦然。這說明既可以把一條語句放在幾行上,也可以把幾條語句放在同一行上,雖然不太好看,但仍是合法的代碼。一行代碼中不可分割的元素叫做標記,空格、製表符和回車統稱為空白,通常,必須用空白將兩個標記分開。一般來說,有效但難看的代碼不會令人滿意,如果遵循合理的風格,程式將更便於閱讀:

  • 每條語句占一行。
  • 每個函數的開始花括弧以及結束花括弧獨自各占一行。
  • 語句在應該縮進的地方縮進。

2.2 C++ 語句

2.2.1 聲明語句

聲明語句創建變數,指出了要存儲的數據類型和程式對存儲在這裡的數據使用的名稱,聲明語句通常導致編譯器為變數分配記憶體空間。

int carrots;

2.2.2 賦值語句

賦值語句給變數提供一個值(將值賦給存儲單元),符號 = 叫做賦值運算符,C++ 和 C 可以連續使用賦值運算符,此時賦值將從右向左進行。

carrots = 25;	//常見賦值
a = b = c = 25;	//連續賦值

2.3 其他 C++ 語句

cincout 的使用,類的簡介:描述了一種數據類型的全部屬性(包括可使用它執行的操作),對象是根據這些描述創建的實體。

2.4 函數

C++ 函數分兩種:有返回值的和沒有返回值的。

2.4.1 有返回值的函數

有返回值的函數將生成一個值,這個值可賦給變數或在其他表達式中使用。被調用的函數叫做被調用函數(called function),包含函數調用的函數叫做調用函數(calling function)。函數原型描述的是發送給函數的信息和返回的信息,函數定義則包含了函數的代碼,C++程式應當在首次使用函數之前提供其原型,有兩種方式:一是在源代碼中輸入函數原型、二是包含相應的頭文件。

double sqrt(double);	//函數原型
#include <cmath>	//包含頭文件

2.4.2 函數變體

有些函數需要多個參數,有些函數不接受任何參數,有些函數沒有返回值。

//需要多個參數
double pow(double, double);

//不接受任何參數
int rand(void);

//不接受任何參數,void可省略
int rand();	    

//沒有返回值
void bucks(double); 

在有些語言中,有返回值的函數被稱為函數;沒有返回值的函數被稱為過程子程式;C++ 與 C 一樣,這兩種變體都被稱為函數。

2.4.3 用戶定義的函數

使用自定義函數時,通常將函數原型放到 main() 定義之前,將函數定義放到 main() 的後面。函數定義包括函數頭和花括弧中的函數體

type functionname(argumentlist) //函數頭
{
    statements			//函數體
}

2.4.4 用戶定義的有返回值的函數

函數原型描述了函數介面,即函數如何與程式的其他部分交互;參數列表指出了何種信息將被傳遞給函數;函數類型指出了返回值的類型。

2.4.5 在多函數程式中使用 using 編譯指令

讓程式能夠訪問名稱空間中類、函數或變數的方法有多種:

  • using 編譯指令 放在所有函數定義之前,使得文件中所有函數都能使用該名稱空間中的所有元素。
  • using 編譯指令 放在特定函數定義中,讓特定函數能使用該名稱空間中的所有元素。
  • 在特定函數定義中使用 using 聲明 ,讓特定函數能使用該名稱空間中的指定元素。
  • 在需要使用名稱空間中某元素時,直接使用首碼 名稱空間名::名稱 的形式。

本文來自博客園,作者:木三百川,轉載請註明原文鏈接:https://www.cnblogs.com/young520/p/16492357.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HTML基礎學習 ##前言 HTML基礎學習會由HTML基礎標簽學習、HTML表單學習和一張思維導圖總結HTML基礎三篇文章構成,文章中博主會提取出重點常用的知識和經常出現的bug,提高學習的效率,後續會相繼上傳CSS和JavaScript的博客,歡迎大家一起學習,共同進步。 註:HTML基礎學習的 ...
  • 在 WeGame 的 PC 端官網首頁,有著非常多製作精良的基於滾動的動畫效果。 這裡我簡單截取其中 2 個比較有意思的轉場動畫,大家感受感受。轉場動畫 1: 轉場動畫 2: 是不是挺有意思的,整個動畫的銜接是基於滾輪的滾動觸發的。我猜測是使用了類似 TweenMaxJS 的動畫庫實現。 當然,這兩 ...
  • 前端周刊:2022-12 期 前端開發 Vue2.7 正式發佈! Vue3 的官方跳板 完成第一個 vue3.2 項目後,這是我的技術總結 Vue3 的響應式變數 API 設計的挺難用 Vue2 升級到 Vue3 到底是不是一個正確的選擇? 個人感覺 Vue3 是個失敗的版本 【前端面試題】—30 ...
  • 1、jQuery的基本用法 1.1 jQuery引入 <script src="js/jquery-3.4.1.min.js" type="text/javascript"></script> 1.2 第一個jQuery測試 <script src="js/jquery-3.4.1.min.js" ...
  • 對文檔樹中的節點們 可以用js進行增刪改查: 增: 1、創建元素:這個元素是不會渲染到頁面上的,它不在DOM中 傳入字元串(標簽的名字) var box=document.createElement("div") 2、添加到文檔樹中,x.appendChild(y) 把y節點對象添加到x節點中 bo ...
  • 巨集 #define命令是C語言中的一個巨集定義命令,它用來將一個標識符定義為一個字元串,該標識符被稱為巨集名,被定義的字元串稱為替換文本. 使用巨集時是簡單的代碼段替換. #define的概念 簡單的巨集定義 #define <巨集名> <字元串> 例: #define PI 3.1415926 註:使用簡單 ...
  • 源碼地址 https://gitee.com/bin-0821/chat-room-demo-go-websocket 關於websocket,上一篇文章講述瞭如何通過websocket進行服務端與客戶端的通信,本篇將會帶領大家把各個websocket進行相互通信,在開始之前,請確保有理解 1 go ...
  • # 流程式控制制練習題 # 一、編程題 1、實現一個課程名稱和課程代號的轉換器:輸入下表中的課程代號,輸出課程的名稱。用戶可以迴圈進行輸入,如果輸入0就退出系統。(**使用****switch +while****迴圈實現**) **課程名稱和課程代號對照表** | **課程名稱** | **課程代碼* ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...