C++基礎系列【2】C++基本語法

本文作為入門文檔,簡要介紹C++的非常基本的語法,后面章節會詳細介紹C++的各個語法。

C++ 程序結構

C++程序的基本結構包括頭文件、命名空間、類和函數等。

下面我們通過Hello,World來展示這些元素。

#include <iostream> // 包含標準輸入輸出流庫
using namespace std; // 使用標準命名空間,避免每次調用標準庫時都要加std::前綴int main() {cout << "Hello, World!" << endl; // 輸出Hello, World!到控制臺return 0; // 返回0表示程序正常結束
}

詳解

  1. 頭文件#include <iostream> 指令包含了標準輸入輸出流庫,通過它,程序可以使用 coutcin 等對象。
  2. 命名空間using namespace std; 使得在程序中可以直接使用 std 命名空間中的名字函數,而不需要每次都加上 std:: 前綴。這是為了方便,但在大型項目中,為了避免命名沖突,通常會顯式地使用命名空間前綴。
  3. 主函數int main() 是程序的入口點,程序從這里開始執行。main 函數可以返回一個整數,通常返回 0 表示程序正常結束,返回非零值表示出現錯誤或異常情況。
  4. 輸出語句cout << "Hello, World!" << endl; 使用 cout 對象向控制臺輸出字符串,endl 用于插入換行符并刷新輸出緩沖區

類與對象

我們都知道,C++是一種支持面向對象的編程語言,類(class)是C++中最重要的概念之一,通過類可以定義對象的屬性和行為。

示例代碼

#include <iostream>
using namespace std;class Dog {
private:string name;int age;public:// 構造函數Dog(string dogName, int dogAge) : name(dogName), age(dogAge) {}// 成員函數,用于輸出狗的信息void printInfo() {cout << "Dog name: " << name << ", Age: " << age << endl;}
};int main() {Dog myDog("Buddy", 5); // 創建一個Dog對象myDog.printInfo(); // 調用成員函數輸出信息return 0;
}

詳解

  1. 類定義class Dog 定義了一個名為 Dog 的類。
  2. 私有成員private: 部分定義了類的私有成員變量 nameage。這些變量只能在類內部訪問和修改。
  3. 公有成員public: 部分定義了類的公有成員函數 printInfo() 和構造函數 Dog(string dogName, int dogAge)。構造函數用于初始化對象的狀態,創建類對象時,會自動調用對應的構造函數。
  4. 對象創建Dog myDog("Buddy", 5); 創建了一個 Dog 類的對象 myDog,并使用構造函數初始化了它的 nameage 屬性。
  5. 成員函數調用myDog.printInfo(); 調用了 myDog 對象的 printInfo() 成員函數,輸出對象的信息。

函數與變量

函數封裝代碼塊,它可以接收參數并返回結果。變量用于存儲數據,可以是基本數據類型(如 intfloatchar 等),也可以是我們自定義的類型(如類)。

示例代碼

#include <iostream>
using namespace std;// 函數聲明
int add(int a, int b);int main() {int x = 10, y = 20;int sum = add(x, y); // 調用函數并存儲結果cout << "Sum: " << sum << endl; // 輸出結果return 0;
}// 函數定義
int add(int a, int b) {return a + b; // 返回兩個整數的和
}

詳解

  1. 函數聲明:在 main 函數之前聲明了 add 函數,這告訴編譯器 add 函數的存在,以便在 main 函數中調用它。
  2. 變量聲明與初始化:在 main 函數中聲明并初始化了兩個整數變量 xy
  3. 函數調用int sum = add(x, y); 調用了 add 函數,并將返回值賦給變量 sum
  4. 函數定義:在 main 函數之后定義了 add 函數,它接收兩個整數參數并返回它們的和。

高級特性

C++ 提供了許多高級特性,如模板、異常處理、STL(標準庫)等,這些特性極大地增強了 C++ 的靈活性。

通過模板,程序員可以編寫與類型無關的代碼。通過模板,可以創建泛型函數和類,這些函數和類可以處理任意類型的數據。

示例代碼

#include <iostream>
using namespace std;// 泛型函數模板
template <typename T>
T max(T a, T b) {return (a > b) ? a : b;
}int main() {int intMax = max(10, 20); // 調用泛型函數模板處理整數double doubleMax = max(10.5, 20.3); // 調用泛型函數模板處理浮點數cout << "Int max: " << intMax << endl;cout << "Double max: " << doubleMax << endl;return 0;
}

異常處理:C++ 提供了異常處理機制,程序可以在運行時檢測和處理錯誤情況。通過使用 trycatchthrow 關鍵字,可以操作異常相關能力。

STL(標準模板庫):STL 是一組高效的、通用的模板類和函數,用于執行常見的編程任務,如sortmapfindset等。STL 提供了容器(如 vectormapset 等)、迭代器、算法和函數對象等組件。

代碼規范

這里簡單介紹幾個C++的編碼規范:

  1. 使用 const 關鍵字:在函數參數和返回值前使用 const 關鍵字可以表明這些參數或返回值不會被修改,有助于提高代碼的可讀性和安全性。
  2. 避免使用全局變量:全局變量會導致代碼難以維護和調試。盡量使用局部變量或類的成員變量來封裝數據。
  3. 使用 RAII(資源獲取即初始化):RAII 是一種管理資源(如內存、文件句柄、套接字等)的技術。通過將對象的生命周期與資源的生命周期綁定在一起,可以確保資源在不再需要時自動釋放(非常有用)。
  4. 編寫清晰的代碼:使用有意義的變量名、函數名和注釋來提高代碼的可讀性。避免使用過于復雜的代碼結構,盡量保持代碼簡潔直觀。

作者介紹

  • 程序喵大人
  • 35- 資深C/C++/Rust/Android/iOS客戶端開發
  • 10年大廠工作經驗
  • 嵌入式/人工智能/自動駕駛/音視頻/游戲開發入門級選手
  • 《C++20高級編程》《C++23高級編程》等多本書籍著譯者

C++訓練營

專為校招、社招3年工作經驗的同學打造的1V1 C++訓練營,量身定制學習計劃、每日代碼review,簡歷優化,面試輔導,一條龍服務,已幫助多名學員獲得offer!訓練營介紹

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894653.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894653.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C語言】球球大作戰游戲

目錄 1. 前期準備 2. 玩家操作 3. 生成地圖 4. 敵人移動 5. 吃掉小球 6. 完整代碼 1. 前期準備 游戲設定:小球的位置、小球的半徑、以及小球的顏色 這里我們可以用一個結構體數組來存放這些要素,以方便初始化小球的信息。 struct Ball {int x;int y;float r;DWORD c…

圖的基本術語——非八股文

我之前只看到了數據結構與算法的冰山一角&#xff0c;感覺這些術語只會讓知識越來越難理解&#xff0c;現在來看&#xff0c;他們完美抽象一些概念和知識&#xff0c;非常重要。 本篇概念肯定總結不全&#xff0c;只有遇到的會寫上&#xff0c;持續更新&#xff0c;之前文章已經…

oracle: 表分區>>范圍分區,列表分區,散列分區/哈希分區,間隔分區,參考分區,組合分區,子分區/復合分區/組合分區

分區表 是將一個邏輯上的大表按照特定的規則劃分為多個物理上的子表&#xff0c;這些子表稱為分區。 分區可以基于不同的維度&#xff0c;如時間、數值范圍、字符串值等&#xff0c;將數據分散存儲在不同的分區 中&#xff0c;以提高數據管理的效率和查詢性能&#xff0c;同時…

【單層神經網絡】基于MXNet的線性回歸實現(底層實現)

寫在前面 剛開始先從普通的尋優算法開始&#xff0c;熟悉一下學習訓練過程下面將使用梯度下降法尋優&#xff0c;但這大概只能是局部最優&#xff0c;它并不是一個十分優秀的尋優算法 整體流程 生成訓練數據集&#xff08;實際工程中&#xff0c;需要從實際對象身上采集數據…

本地快速部署DeepSeek-R1模型——2025新年賀歲

一晃年初六了&#xff0c;春節長假余額馬上歸零了。今天下午在我的電腦上成功部署了DeepSeek-R1模型&#xff0c;抽個時間和大家簡單分享一下過程&#xff1a; 概述 DeepSeek模型 是一家由中國知名量化私募巨頭幻方量化創立的人工智能公司&#xff0c;致力于開發高效、高性能…

C++11詳解(一) -- 列表初始化,右值引用和移動語義

文章目錄 1.列表初始化1.1 C98傳統的{}1.2 C11中的{}1.3 C11中的std::initializer_list 2.右值引用和移動語義2.1左值和右值2.2左值引用和右值引用2.3 引用延長生命周期2.4左值和右值的參數匹配問題2.5右值引用和移動語義的使用場景2.5.1左值引用主要使用場景2.5.2移動構造和移…

在K8S中,pending狀態一般由什么原因導致的?

在Kubernetes中&#xff0c;資源或Pod處于Pending狀態可能有多種原因引起。以下是一些常見的原因和詳細解釋&#xff1a; 資源不足 概述&#xff1a;當集群中的資源不足以滿足Pod或服務的需求時&#xff0c;它們可能會被至于Pending狀態。這通常涉及到CPU、內存、存儲或其他資…

手寫MVVM框架-構建虛擬dom樹

MVVM的核心之一就是虛擬dom樹&#xff0c;我們這一章節就先構建一個虛擬dom樹 首先我們需要創建一個VNode的類 // 當前類的位置是src/vnode/index.js export default class VNode{constructor(tag, // 標簽名稱&#xff08;英文大寫&#xff09;ele, // 對應真實節點children,…

linux內核源代碼中__init的作用?

在 Linux 內核源代碼中&#xff0c;__init是一個特殊的宏&#xff0c;用于標記在內核初始化階段使用的變量或函數。這個宏的作用是告訴內核編譯器和鏈接器&#xff0c;被標記的變量或函數只在內核的初始化階段使用&#xff0c;在系統啟動完成后就不再需要了。因此&#xff0c;這…

【大數據技術】教程03:本機PyCharm遠程連接虛擬機Python

本機PyCharm遠程連接虛擬機Python 注意:本文需要使用PyCharm專業版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso寫在前面 本文主要介紹如何使用本地PyCharm遠程連接虛擬機,運行Python腳本,提高編程效率。 注意: …

pytorch實現門控循環單元 (GRU)

人工智能例子匯總&#xff1a;AI常見的算法和例子-CSDN博客 特性GRULSTM計算效率更快&#xff0c;參數更少相對較慢&#xff0c;參數更多結構復雜度只有兩個門&#xff08;更新門和重置門&#xff09;三個門&#xff08;輸入門、遺忘門、輸出門&#xff09;處理長時依賴一般適…

PAT甲級1032、sharing

題目 To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, loading and being are stored as showed in Figure …

最小生成樹kruskal算法

文章目錄 kruskal算法的思想模板 kruskal算法的思想 模板 #include <bits/stdc.h> #define lowbit(x) ((x)&(-x)) #define int long long #define endl \n #define PII pair<int,int> #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); using na…

為何在Kubernetes容器中以root身份運行存在風險?

作者&#xff1a;馬辛瓦西奧內克&#xff08;Marcin Wasiucionek&#xff09; 引言 在Kubernetes安全領域&#xff0c;一個常見的建議是讓容器以非root用戶身份運行。但是&#xff0c;在容器中以root身份運行&#xff0c;實際會帶來哪些安全隱患呢&#xff1f;在Docker鏡像和…

js --- 獲取時間戳

介紹 使用js獲取當前時間戳 語法 Date.now()

ConcurrentHashMap線程安全:分段鎖 到 synchronized + CAS

專欄系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目標&#xff1a; 理解ConcurrentHashMap為什么線程安全&#xff1b;ConcurrentHashMap的具體細節還需要進一步研究 目錄 ConcurrentHashMap介紹JDK7的分段鎖實現JDK8的synchr…

Vue和Java使用AES加密傳輸

背景&#xff1a;Vue對參數進行加密&#xff0c;對響應進行解密。Java對參數進行解密&#xff0c;對響應進行解密。不攔截文件上傳類請求、GET請求。 【1】前端配置 安裝crypto npm install crypto-js編寫加解密工具類encrypt.js import CryptoJS from crypto-jsconst KEY …

開發板目錄 /usr/lib/fonts/ 中的字體文件 msyh.ttc 的介紹【微軟雅黑(Microsoft YaHei)】

本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸擴展。 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸擴展。 問&#xff1a;運行 ls /usr/lib/fonts/ 發現有一個名叫 msyh.ttc 的字體文件&#xff0c;能介紹…

[ESP32:Vscode+PlatformIO]新建工程 常用配置與設置

2025-1-29 一、新建工程 選擇一個要創建工程文件夾的地方&#xff0c;在空白處鼠標右鍵選擇通過Code打開 打開Vscode&#xff0c;點擊platformIO圖標&#xff0c;選擇PIO Home下的open&#xff0c;最后點擊new project 按照下圖進行設置 第一個是工程文件夾的名稱 第二個是…

述評:如果抗拒特朗普的“普征關稅”

題 記 美國總統特朗普宣布對美國三大貿易夥伴——中國、墨西哥和加拿大&#xff0c;分別征收10%、25%的關稅。 他威脅說&#xff0c;如果這三個國家不解決他對非法移民和毒品走私的擔憂&#xff0c;他就要征收進口稅。 去年&#xff0c;中國、墨西哥和加拿大這三個國家&#…