C++入門基礎:命名空間,缺省參數,函數重載,輸入輸出

命名空間:

C++語言是基于C語言的,融入了面向對象編程思想,有了很多有用的庫,所以接下來我們將學習C++如何優化C語言的不足的。

在C/C++語言實踐中,在全局作用域中變量,函數,類會有很多,這就導致總會有名稱沖突,這時候C++就有命名空間的目的是對標識符的名稱本地化(作用在一個新的作用域里),避免名稱沖突或名字沖突。

命名空間的定義:用namespace關鍵字

namespace T
{int j = 10;int add(int i, int b){return i + b;}struct STR{char a;};
}

一個命名空間就定義了一個新的作用域 。

命名空間的使用:

namespace T
{int j = 10;int add(int i, int b){return i + b;}struct STR{char a;};
}using namespace T;//將整個命名空間的內容引入展開using T::j;//使用using將指定命名空間的內容展開int main()
{int j = 20;cout << j << endl;cout << T::j << endl;//指定作用域去找,:: 是作用域限定符
}

?上述需要注意的是使用 using 將命名空間的內容展開之后,如果有同名變量存在在同一作用域中的話就會報錯,所以一般為了安全我們一般會使用指定作用域限定符。原因:編譯器在編譯時尋找原則為:1.局部2.全局 3.如果指定了直接去指定域。如果說展開了命名空間,則還是遵循 1局部 2全局 3.指定就去指定找。

上述就是將命名空間的 j 展開了但是還是會先找局部作用域的。

上述就是指定的找。

有時候C語言中變量名字會和庫里面函數的名字沖突無法解決,C++就可以用命名空間解決,也可以解決不同程序員之間命名沖突的問題。

C++輸入和輸出:

#include<iostream>
using namespace std;int main()
{int rand = 20;cout << rand << endl;cin >> rand ;cout << rand << endl;
}

如圖上述的代碼,C++ 中一般的輸入和輸出 使用 cin 和 cout 包含在?#include<iostream> 頭文件中,使用命名空間std。當然也可以用C語言中的,因為C++ 兼容C

這里有C++符號的復用(也叫運算符重載),<<? : 1.左移操作符 2.流插入。 >>? : 1.右移 2. 流提取。在C++的輸入輸出中比C更方便,因為會自動識別變量類型。(endl 是特殊符號表示換行相當于 “/n”)。

缺省參數:

缺省參數是聲明或定義函數時為函數的參數指定一個缺省值,調用函數時如果沒有實參,則使用缺省值,有實參就用實參。

//全缺省參數
void Func(int a = 10,int b = 2, int c = 3)
{cout << a + b + c << endl;
}int main()
{Func();
}

使用了缺省參數。

還有半缺省參數:

注意:1.半缺省參數只能從右往左依次來給,不能有間隔。2.缺省參數不能同時在聲明和定義中同時存在。3.缺省值必須是常量活著全局變量。4. C語言不支持

函數重載:

C++允許在同一個作用域中聲明幾個功能類似的同名函數,這些函數的區別為他們的形參列表(參數個數,參數類型,或者類型順序)不同。常用來解決功能類似,類型不同的函數問題。

//參數類型不同
int add(int a, int b)
{cout << "int add(int a, int b) :" << a + b << endl;return 0;
}
double add(double a, double b)
{cout << "double add(double a, double b) :" << a + b << endl;return 0;
}//參數個數不同
void F(int i, int j)
{cout << "void F(int i, int j) :" << i << " " << j << endl;
}
void F(int i)
{cout << "void F(int i) :" << i << endl;
}//參數類型順序不同
void F(int a, char b)
{cout << "void F(int a, char b) :" << a << " " << b << endl;
}
void F(char a, int b)
{cout << "void F(char a, int b) :" << a << " " << b << endl;
}
int main()
{//參數類型不同add(10,20);add(1.1, 2.2);//參數個數不同F(10, 20);F(10);//參數類型順序不同F(10, 'I');F('I', 10);
}

?

這就是函數重載。很方便。

注意:返回值不同不能構成函數重載,編譯器無法識別。

為什么可以函數重載------原理:名字修飾

首先我們了解到一個程序走起來,需要四個階段:1.預處理 2.編譯 3.匯編 4.鏈接

在實踐中,聲明和定義一般是分開的,編譯器編譯時會拿到函數的聲明這時沒有定義就沒有函數的地址,但是會先過掉,因為有聲明在。之后就是匯編形成符號表。

最后鏈接時,看到調用了某個函數但是沒有函數的地址,就會在其他文件的符號表中去找函數的地址,那鏈接器根據什么去找呢?

在C語言中:鏈接時,直接用函數名去找地址,如果有同名函數,編譯器區分不開,就會報錯。

C++支持函數重載:會有一套函數名字修飾規則,在函數名字中引入參數類型之類的填入符號表,這樣子編譯器尋找時就可以精確找到對應函數地址

所以只要參數不同,修飾的名字就不同,就支持了重載。

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

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

相關文章

緩存 --- Redis基本數據類型

緩存 --- Redis基本數據類型 Redis Intro5種基礎數據類型 Redis Intro Redis&#xff08;Remote Dictionary Server&#xff09;是一款開源的高性能鍵值存儲系統&#xff0c;常用于緩存、消息中間件和實時數據處理場景。以下是其核心特點、數據類型及典型使用場景&#xff1a; …

Redis命令——list

列表類型是用來存儲多個有序的字符串&#xff0c;列表中的每個字符串稱為元素&#xff08;element&#xff09;&#xff0c;?個列表最多可以存儲個元素 在 Redis 中&#xff0c;可以對列表兩端插入&#xff08;push&#xff09;和彈出&#xff08;pop&#xff09;&#xff0c;…

Android Jetpack Compose 狀態管理解析:remember vs mutableStateOf,有啥不一樣?為啥要一起用?

&#x1f331;《Jetpack Compose 狀態管理解析&#xff1a;remember vs mutableStateOf&#xff0c;有啥不一樣&#xff1f;為啥要一起用&#xff1f;》 在 Jetpack Compose 的世界里&#xff0c;UI 是響應式的。這意味著當狀態發生變化時&#xff0c;UI 會自動重組&#xff0…

使用 PCL 和 Qt 實現點云可視化與交互

下面我將介紹如何結合點云庫(PCL)和Qt框架(特別是QML)來實現點云的可視化與交互功能&#xff0c;包括高亮選擇等效果。 1. 基本架構設計 首先需要建立一個結合PCL和Qt的基本架構&#xff1a; // PCLQtViewer.h #pragma once#include <QObject> #include <pcl/point…

mybatis plus打印sql日志到指定目錄

1、mybatis plus打印sql日志 參考文檔&#xff1a;mybatis plus打印sql日志_mybatisplus日志打印-CSDN博客 2、修改 修改InfoLevelLogger Override public void debug(String s) {// 修改這里logger.info(s);log.debug(s); } 增加&#xff1a;log.debug(s); 修改logback.x…

vue3 watch和watchEffect 的用法和區別

在 Vue 3 里&#xff0c;watch 和 watchEffect 都是用于響應式數據變化的 API&#xff0c;但它們在使用方法和應用場景上存在差異。下面詳細介紹它們的用法和區別。 用法 watch watch 用于監聽特定的響應式數據源&#xff0c;當數據源發生變化時&#xff0c;會執行相應的回調…

Qt中修改了UI設計文件后編譯不生效問題的解決辦法

復制工程過來后&#xff1a; 1、刪除build文件 2、刪除.user文件&#xff0c;恢復為文件最初的那樣 3、執行make distclean,刪除所有由先前構建過程生成的文件 4、再次打開工程&#xff0c;修改ui文件編譯生效&#xff01;

EtherCAT轉ProfiNet邊緣計算網關配置優化:汽車制造場景下PLC與機器人協同作業案例

1.行業背景與需求分析 智能汽車焊裝車間是汽車制造的核心工藝環節&#xff0c;某德國豪華品牌在其上海MEB工廠新建的焊裝車間中&#xff0c;采用西門子S7-1500PLC作為ProfiNet主站&#xff0c;負責整線協調與質量追溯&#xff1b;同時部署KUKAKR1500Titan機器人&#xff08;Eth…

day46—雙指針-兩數之和-輸入有序數組(LeetCode-167)

題目描述 給你一個下標從 1 開始的整數數組 numbers &#xff0c;該數組已按 非遞減順序排列 &#xff0c;請你從數組中找出滿足相加之和等于目標數 target 的兩個數。如果設這兩個數分別是 numbers[index1] 和 numbers[index2] &#xff0c;則 1 < index1 < index2 &l…

線性代數 | 知識點整理 Ref 1

注&#xff1a;本文為 “線性代數 | 知識點整理” 相關文章合輯。 因 csdn 篇幅合并超限分篇連載&#xff0c;本篇為 Ref 1。 略作重排&#xff0c;未整理去重。 圖片清晰度限于引文原狀。 如有內容異常&#xff0c;請看原文。 線性代數知識匯總 Arrow 于 2016-11-27 16:27:5…

比特幣的跨輸入簽名聚合(Cross-Input Signature Aggregation,CISA)

1. 引言 2024 年&#xff0c;人權基金會&#xff08;Human Rights Foundation&#xff0c;簡稱 HRF&#xff09;啟動了一項研究獎學金計劃&#xff0c;旨在探討“跨輸入簽名聚合”&#xff08;Cross-Input Signature Aggregation&#xff0c;簡稱 CISA&#xff09;的潛在影響。…

3.基礎開發工具

1.軟件包管理器 1.1什么是軟件包 ? 在Linux下安裝軟件, ?個通常的辦法是下載到程序的源代碼, 并進?編譯, 得到可執?程序. ? 但是這樣太?煩了, 于是有些?把?些常?的軟件提前編譯好, 做成軟件包(可以理解成windows上 的安裝程序)放在?個服務器上, 通過包管理器可以很…

Golang errors 包快速上手

文章目錄 1.變量2.類型3.函數3.1 New3.2 Is簡介函數簽名核心功能示例代碼使用場景注意事項小結 3.3 As簡介函數簽名核心功能示例代碼使用場景注意事項小結 3.4 Unwrap簡介函數簽名核心功能使用示例使用場景注意事項小結 3.5 Join簡介函數簽名核心功能使用場景注意事項小結 4.小…

Java File 類詳解

Java File 類詳解 File 類是 Java 中用于表示文件和目錄路徑名的抽象類&#xff0c;位于 java.io 包中。它提供了豐富的 API&#xff0c;用于操作文件系統&#xff0c;包括創建、刪除、重命名、查詢文件屬性等功能。 1. File 類核心知識點 &#xff08;1&#xff09;構造方法…

基于javaweb的SpringBoot兒童愛心管理系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

Unity Nav Mesh導航系統的簡單使用

標題 1.下載。2.面板位置3.object面板4.Area面板5.Bake面板6.Agent面板7.Nav Mesh Agent組件8.Nav Mesh Obstacle組件9.簡單使用 1.下載。 unity2022以上版本要去packageManager中下載。 2.面板位置 3.object面板 Navigation Static&#xff1a;設置該物體是否被列入靜態尋路…

FairyGUI圖標文字合批失敗的原因

1&#xff09;FairyGUI圖標文字合批失敗的原因 2&#xff09;為什么Cubemap的內存占用超高 3&#xff09;如何找到網格某個切面的中心點 4&#xff09;為什么SafeZone在倒屏后方向相反 這是第428篇UWA技術知識分享的推送&#xff0c;精選了UWA社區的熱門話題&#xff0c;涵蓋了…

[BUG]Cursor C++擴展不支持

本文內容組織形式 問題描述失效原因解決方案使用野版C Extension 猜你喜歡結語 問題描述 日期&#xff1a;20250419 操作系統&#xff1a; mac C代碼沒有辦法進行跳轉&#xff0c;并且和以前的文本標亮也不同 并且還有如下問題彈窗 C/C 擴展只能與 Microsoft Visual Studio…

深?理解 JVM 執?引擎

深?理解 JVM 執?引擎 其中前端編譯是在 JVM 虛擬機之外執?&#xff0c;所以與 JVM 虛擬機沒有太?的關系。任何編程語?&#xff0c;只要能夠編譯出 滿? JVM 規范的 Class ?件&#xff0c;就可以提交到 JVM 虛擬機執?。?于編譯的過程&#xff0c;如果你不是想要專?去研…

Ubuntu 部署 DeepSeek

在 Ubuntu 系統上部署 DeepSeek 模型&#xff0c;能讓用戶利用其強大的人工智能能力&#xff0c;同時保障數據的安全性與操作的自主性。不過&#xff0c;這一過程涉及諸多技術細節&#xff0c;需要謹慎操作。以下將為你詳細介紹在 Ubuntu 系統部署 DeepSeek 的操作步驟及注意事…