C++___快速入門(上)

第一個C++程序

#include<iostream>
using namespace std;
int main()
{cout << "hello world !" << endl;return 0;
}

????????上邊的代碼就是用來打印字符串 “hello world !” 的,可見,與C語言還是有很大的差別的,接下來我們就直接進入C++的世界!?

命名空間namespace

? ? ? ? 在我們日常寫代碼的過程當中,可能會在同一個域中出現變量名,函數名等等的定義重名的情況,如果還是堅持不同變量用相同的名字的話,編譯器就會報錯,這個時候,我們就需要用到namespace關鍵字

????????定義命名空間

? ? ? ? 我們首先來看下邊的一張圖片。

? ? ? ? 上邊是用C語言寫的代碼,其中就定義了兩個重名的x,但是為什么這里代碼沒有報錯,并且打印的是10呢?

? ? ? ? 原因是這里的x一個是屬于全局域,一個是屬于局部域,而在默認的情況下(也就是沒有指定域的情況下),編譯器會默認先局部去找,然后再全局去找,因此這里就打印的是10。

? ? ? ? 那如果兩個x都在全局的位置呢?

? ? ? ? 其實除了全局域,局部域,還有很多其它的域,我們主要探討的是用namespace定義的域,用最簡單的理解方式就是用namespace可以定義一個域,然后在這個自己定義的域里邊寫的東西就不會與全局的發生命名重復的沖突了,因此,namespace解決的是全局的命名重復問題。不能定義在局部。

? ? ? ? 來看一下下邊的例子。

#include<stdio.h>//命名空間的定義就是 
//namespace   命名空間名 
namespace xc
{int x = 10;
}int x = 100;//全局變量int main()
{printf("%d\n", x);//100printf("%d\n", xc::x);//10return 0;
}

? ? ? ? ::表示的是域作用限定符,如果它的前邊什么都不加的話,就默認訪問的是全局域的,上邊代碼里邊的第一個x打印結果是100,是因為不加任何東西的情況下,編譯器就先局部找,然后再全局找,如果想要訪問命名空間里邊的x,就要像上邊的那種寫法。

? ? ? ? 這里還要額外說明一下,命名空間域不會影響變量的生命周期,因此上邊命名空間域xc里的x還是屬于全局變量的。

? ? ? ? namespace的嵌套定義:

? ? ? ? 首先,不同文件里邊的同名的命名空間域會認為是同一個。

? ? ? ? 但在日常的工作當中,同一個項目可能會有不同的小組去完成,而不同的小組可能會使用不同名字的命名空間域,同一個namespace的內部可能又有重名的,這時候就可以用namespace的嵌套定義。看一個例子。

#include<stdio.h>namespace xxc
{namespace xc1{int rand = 1;int Add(int left, int right){return left + right;}}namespace xc2{int rand = 2;int Add(int left, int right){return (left + right) * 10;}}
}int main()
{printf("%d\n", xxc::xc1::rand);printf("%d\n", xxc::xc2::rand);printf("%d\n", xxc::xc1::Add(1, 2));printf("%d\n", xxc::xc2::Add(1, 2));return 0;
}

????????命名空間使用

? ? ? ? 在上邊已經說了在編譯查找的時候如果不指定在命名空間域里邊查找,是不會去找的,只會默認先局部然后全局的方式去找。

? ? ? ? 但是想要訪問命名空間中的變量或者函數不止只有指定命名空間這樣一種方式。還有兩種方式。

? ? ? ? 其一是可以展開命名空間中的全部成員。

? ? ? ? 其二是可以將命名空間中的某個成員展開。

? ? ? ? 請看下邊的代碼示例。

#include<stdio.h>namespace xxc
{int a = 0;int b = 10;
}//指定命名空間訪問
int main()
{printf("%d\n", xxc::a);return 0;
}//展開命名空間中的某一個成員
using xxc::a;
int main()
{printf("%d\n", a);printf("%d\n",xxc::b);return 0;
}//using 將命名空間全部展開
using namespace xxc;
int main()
{printf("%d\n", a);printf("%d\n", b);
}

C++中的輸入和輸出

? ? ? ? <iostream>是 Input Output Stream的縮寫,它是一個標準的輸入輸出流庫,里邊定義了標準的輸入輸出流對象。

? ? ? ? 這里涉及到更深的就不在本篇博客里邊講解了,大家初學的話就了解基本用法就行。

? ? ? ? coutcin一個是輸出的意思,一個是輸入的意思,其中cout配對的是流插入運算符?<< 表示輸出,cin配對的是流提取運算符?>>,表示輸入。并且這兩個輸入和輸出都會自動識別類型且可以輸入輸出任意類型。最后一個就是endl,現在初學者暫且理解它的作用為換行就行了。

#include<iostream>
using namespace std;
int main()
{int a;float b;cin >> a >> b;cout << a << " " << b << " " << endl;return 0;
}

缺省參數

? ? ? ? 缺省參數是在函數聲明或者定義的時候的給函數形參的一個默認的值。缺省參數分為全缺省和半缺省。

? ? ? ? 全缺省就是給函數全部的參數給缺省值,半缺省就是從右到左依次給函數參數缺省值且不能跳躍著給缺省值。

? ? ? ? 當在調用有缺省參數的函數的時候,我們給實參是從左往后按照順序依次給到形參的,不能間隔著給值,沒有自己給值的話,函數就會用默認的缺省值。但如果那個函數是半缺省的話,那沒有缺省值的參數一定要給它傳值。

? ? ? ? 最后一個點就是如果有多文件的大項目的時候,缺省值是在函數聲明的時候給的,函數定義的時候就不用給缺省值了(初學者先了解)

? ? ? ? 代碼示例

#include<iostream>
using namespace std;//全缺省
void Func1(int a = 10, int b = 100, int c = 1000)
{cout << a << " " << b << " " << c << " " << endl;
}//半缺省
void  Func2(int a, int b = 100, int c = 1000)
{cout << a << " " << b << " " << c << " " << endl;
}int main()
{//調用全缺省的函數Func1();Func1(1, 2, 3);Func1(1, 2);//調用半缺省的函數Func2(1);//沒有缺省值的參數必須給值Func2(1, 2);Func2(1, 2, 3);return 0;
}

函數重載

? ? ? ? 在C++里邊的同一個作用域下支持出現同名的函數,有個要求就是這些函數的形參列表是需要不同的。包括以下幾點。

? ? ? ? 1.函數的形參的個數不同

? ? ? ? 2.函數的形參的類型不同

? ? ? ? 3.函數的形參的類型順序不同

? ? ? ? 請看以下的示例

#include<iostream>
using namespace std;//聲明,以下的函數重載只是舉例子,就不寫函數體了
//1.參數的類型不同
int Add(int a,int b)
{ }double Add(double a,double b)
{ }//2.參數的個數不同
void f()
{ }void f(int a)
{ }//3.參數的類型的順序不同
void f(int a,char b)
{ }void f(char b, int a)
{ }int main()
{return 0;
}

? ? ? ? 當調用有重載的函數的時候,編譯器會根據這些參數的不同來自動判斷我們調用的是哪個函數。

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

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

相關文章

構建企業級Docker日志驅動:將容器日志無縫發送到騰訊云CLS

源碼地址:https://github.com/k8scat/docker-log-driver-tencent-cls 在現代云原生架構中,容器化應用已經成為主流部署方式。隨著容器數量的快速增長,如何高效地收集、存儲和分析容器日志成為了一個關鍵挑戰。傳統的日志收集方式往往存在以下問題: 日志分散在各個容器中,難…

Kafka——消費者組重平衡能避免嗎?

引言 其實在消費者組到底是什么&#xff1f;中&#xff0c;我們講過重平衡&#xff0c;也就是Rebalance&#xff0c;現在先來回顧一下這個概念的原理和用途。它是Kafka實現消費者組&#xff08;Consumer Group&#xff09;彈性伸縮和容錯能力的核心機制&#xff0c;卻也常常成…

使用爬蟲獲取游戲的iframe地址

如何通過爬蟲獲取游戲的iframe地址要獲取網頁中嵌入的游戲的iframe地址&#xff08;即iframe元素的src屬性&#xff09;&#xff0c;您可以使用網絡爬蟲技術。iframe是HTML元素&#xff0c;用于在當前頁面中嵌入另一個文檔&#xff08;如游戲頁面&#xff09;&#xff0c;其地址…

NTLite Ent Version

NTLite是一款專業的系統安裝鏡像制作工具&#xff0c;通過這款軟件可以幫助用戶快速生成鏡像文件打好補丁&#xff0c;很多朋友在安裝電腦系統的時候一般都安裝了windows系統的所有Windows組件&#xff0c;其實有很多Windows組件你可能都用到不到&#xff0c;不如在安裝系統時就…

Maven之依賴管理

Maven之依賴管理一、Maven依賴管理的核心價值二、依賴的基本配置&#xff08;坐標與范圍&#xff09;2.1 依賴坐標&#xff08;GAV&#xff09;2.2 依賴范圍&#xff08;scope&#xff09;示例&#xff1a;常用依賴范圍配置三、依賴傳遞與沖突解決3.1 依賴傳遞性示例&#xff1…

【Unity實戰100例】Unity資源下載系統開發流程詳解(移動端、PC端 ,局域網控制臺服務)

目錄 一、項目概述 二、服務器開發 1、配置文件設計 1、加載配置 2. 處理客戶端請求 3. 文件下載處理 三、客戶端開發 1、配置管理 1、配置加載與保存 2、下載任務管理 1、任務類設計 2、下載隊列管理 3、核心下載流程 四、UI系統實現 五、部署與測試 1、服務…

[Python] -進階理解7- Python中的內存管理機制簡析

Python(尤其是 CPython)采用自動內存管理機制,核心包括引用計數(Reference Counting)與垃圾回收機制(Garbage Collection),并配合專門的內存池和分配器機制來提升效率與減少碎片。 這套機制隱藏在開發者視線之外,Python 開發者無需手動申請或釋放內存。 二、Python 內…

云祺容災備份系統AWS S3對象存儲備份與恢復實操手冊

1、創建密鑰訪問AWS控制臺&#xff0c;鼠標移至右上角賬戶處&#xff0c;在彈出菜單中點擊安全憑證&#xff0c;如圖1。圖1在彈出頁面中&#xff0c;下滑找到訪問密鑰&#xff0c;并點擊創建訪問密鑰&#xff0c;如圖2。圖2選擇其他&#xff0c;并點擊下一步&#xff0c;如圖3。…

使用 LLaMA 3 8B 微調一個 Reward Model:從入門到實踐

本文將介紹如何基于 Meta 的 LLaMA 3 8B 模型構建并微調一個 Reward Model&#xff0c;它是構建 RLHF&#xff08;基于人類反饋的強化學習&#xff09;系統中的關鍵一環。我們將使用 Hugging Face 的 transformers、trl 和 peft 等庫&#xff0c;通過參數高效微調&#xff08;L…

matrix-breakout-2-morpheus靶場攻略

靶場使用將壓縮包解壓到一個文件夾中&#xff0c;用虛擬機應用新建虛擬機&#xff0c;掃描虛擬機&#xff0c;掃描那個文件夾&#xff0c;就可以把虛擬機掃出來了&#xff0c;然后啟動虛擬機這時候靶場啟動后&#xff0c;咱們現在要找到這個靶場。靶場是網頁形式的&#xff0c;…

MySQL 復制表

MySQL 復制表 概述 在數據庫管理中&#xff0c;復制表是一項常用的操作。它允許數據庫管理員將一個表中的數據復制到另一個表中&#xff0c;無論是同一個數據庫還是不同的數據庫。MySQL數據庫提供了多種方法來復制表&#xff0c;本文將詳細介紹MySQL復制表的過程、方法及其應用…

『哈哥贈書 - 55期』-『碼農職場:IT人求職就業手冊』

文章目錄?? 碼農職場&#xff1a;IT人求職就業手冊?? 本書簡介?? 作者簡介?? 編輯推薦這是一本專為廣大IT行業求職者量身定制的指南&#xff0c;提供了從職前準備到成功就業的全方位指導&#xff0c;涵蓋了職業目標規劃、自我技能評估、求職策略、簡歷準備以及職場心理…

單片機學習課程

單片機學習課程 課程介紹 單片機技術作為現代工業自動化、電子電氣、通信及物聯網等領域的主流技術&#xff0c;早已深度融入我們生活與生產的各個角落。從常見家電到自動化公共設施&#xff0c;都離不開單片機的支持。同時&#xff0c;它也是學習 ARM 嵌入式系統、FPGA 設計等…

【AcWing 143題解】最大異或對

AcWing 143. 最大異或對 【題目描述】 在查看解析之前&#xff0c;先給自己一點時間思考哦&#xff01; 【題解】 本題要求給定一個整數序列&#xff0c;找出其中任意兩個數進行異或運算后&#xff0c;結果的最大值是多少。由于數據規模較大&#xff0c;我們不能簡單地通過兩…

SQLAlchemy 2.0簡單使用

記錄一下SQLAlchemy 2.0連接mysql數據庫的方法及簡單使用 環境及依賴 Python:3.8 mysql:8.3 Flask:3.0.3 SQLAlchemy:2.0.37 PyMySQL:1.1.1使用步驟 1、創建引擎&#xff0c;鏈接到mysql engine create_engine(mysqlpymysql://{username}:{password}{ip}:3306/{database_name}…

如何創建或查看具有 repo 權限的 GitHub 個人訪問令牌(PAT)

要創建或查看具有 repo 權限的 GitHub 個人訪問令牌(PAT),請按照以下步驟操作: 一、生成具有 repo 權限的 PAT 登錄 GitHub 訪問 GitHub 官網,使用你的賬戶登錄。 進入開發者設置 點擊右上角頭像,選擇 Settings(設置) → 左側菜單中選擇 Developer settings(開發者設…

【AI時代速通QT】第五節:Qt Creator如何引入第三方庫,以OpenCV為例

目錄 引言 一、第一步&#xff1a;萬事開頭難 - 準備工作 1.1 獲取并“安裝”OpenCV 1.2 創建一個新的Qt項目 1.3 建立專業的項目目錄結構 二、第二步&#xff1a;核心操作 - 配置.pro文件 2.1 方式一&#xff1a;圖形化向導&#xff08;適合初次體驗&#xff09; 2.2 …

使用Clion開發STM32(Dap調試)

使用Clion開發STM32環境配置ST-Link無法下載OpenOCDST-Link調試Dap-Link調試Debug配置查看寄存器值之前寫了一篇文章關于如何用VSCode配合EIDE插件開發STM32 最近研究了如何使用Clion開發STM32 環境配置 使用Clion開發STM32需要用到4個工具&#xff1a;Clion、STM32CubeMX、…

人工智能-python-OpenCV 中 `release()` 和 `destroy()` 的區別

文章目錄OpenCV 中 release() 和 destroy() 的區別1. release()常見使用場景&#xff1a;代碼示例&#xff1a;作用&#xff1a;2. destroy()常見使用場景&#xff1a;代碼示例&#xff1a;作用&#xff1a;3. 總結&#xff1a;4. 何時使用小結&#xff1a;OpenCV 中 release()…

[RPA] 日期時間練習案例

案例1根據日期拆分表格根據表格中不同日期&#xff0c;創建多個對應日期名稱的Sheet頁(名稱格式為"yyyy-mm-dd")&#xff0c;并將同一日期的訂單拷貝至對應Sheet頁日期時間練習題1.xlsx流程搭建&#xff1a;實現效果&#xff1a;