C++基礎語法之重載引用和命名空間等

1.C++關鍵字

c++的關鍵字比我們的c語言的關鍵字多,c++包容C語言并對C語言進行了補充,但是我們對關鍵字的學習是在我們后面逐漸學習的。這里我們的只是提供一個表格對齊了解一下。

2.命名空間

我們c++出現了命名空間的概念,用關鍵字namespace來定義。他主要是補充了C語言的變量名字重復的問題。C/C++中,變量、函數和后面要學到的類都是大量存在的,這些變量、函數和類的名稱將都存 在于全局作用域中,可能會導致很多沖突。使用命名空間的目的是對標識符的名稱進行本地化, 以避免命名沖突或名字污染。

命名空間的定義:

namespace + 空間名字+{

//可以定義我們變量,函數結構體。

}

例如:

namespace zs{int a;int Add(int a,int b)
{return a+b;
}}

我們在寫項目的時候的一般用項目名字的簡寫來命名空間。

我們的命名空間還可以嵌套。

如:

//test.cppnamespace N1
{int a;int b;int Add(int left, int right){return left + right;}namespace N2{int c;int d;int Sub(int left, int right){return left - right;}}
}

?同一個工程中允許存在多個相同名稱的命名空間,編譯器最后會合成同一個命名空間中。

?一個工程中的test.h和上面test.cpp中兩個N1會被合并成一個

// test.h
namespace N1
{int Mul(int left, int right){return left * right;}
}

?我們的命名空間是一個新的作用域,他比我們的C語言的 多了一個作用域(全局作用域和局部作用域)。我們的命名空間中的所有內容都局限于該命名空間中

命名空間的使用:

namespace bit
{// 命名空間中可以定義變量/函數/類型int a = 0;int b = 1;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
int main()
{// 編譯報錯:error C2065: “a”: 未聲明的標識符printf("%d\n", a);return 0;
}

?我們這里的a 是沒有定義的,因為這里的命名空間是一個私有的域,,如果我們不進行的命名空間展開的話,我們是沒辦法訪問這塊空間的,所以這里我們是找不到的a的。

但是在做項目的時候,我們的命名空間全部展開的話是不太好的:

命名空間可以解決命名沖突問題,因為它們允許在不同的作用域中定義相同名字的實體。如果命名空間被展開,那么原本被隔離的命名空間中的實體可能會與外部的實體發生沖突。

所以我們可以只展開我們要用到的。在我們平時寫作業時我們可以全部展開的,就像我們展開我們的我們c++提供的標準庫。

命名空間的使用有三種方式:

1 加命名空間名稱及作用域限定符(::)

int main()
{printf("%d\n", N::a);return 0; ? ?
}

2 使用using將命名空間中某個成員引入

只展開了我們要用的。

using N::b;
int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0; ? ?
}

3 使用using namespace 命名空間名稱 引入

這里是全部展開

using namespce N;
int main()
{printf("%d\n", N::a);printf("%d\n", b);Add(10, 20);return 0; ? ?
}

在我們這里我們如果我們的全局變量和局部比那里那個都有的同一個變量,我們是采取就近原則,局部優先,再是全局,如果我們的命名空間也有的話,并且我們的全局變量也同樣存在,我們也展開我們的命名空間的話,(局部變量沒有),那這里就會導致我們的報錯不會通過,訪問沖突了。

3.C++輸入&輸出

先看一個例子:

#include<iostream>
// std是C++標準庫的命名空間名,C++將標準庫的定義實現都放到這個命名空間中
using namespace std;
int main()
{
cout<<"Hello world!!!"<<endl;
return 0;
}

?說明:

1. 使用cout標準輸出對象(控制臺)和cin標準輸入對象(鍵盤)時,必須包含< iostream >頭文件 以及按命名空間使用方法使用std。

2. cout和cin是全局的流對象,endl是特殊的C++符號,表示換行輸出,他們都包含在包含< iostream >頭文件中。

3. 是流插入運算符,>>是流提取運算符。

4. 使用C++輸入輸出更方便,不需要像printf/scanf輸入輸出時那樣,需要手動控制格式。 C++的輸入輸出可以自動識別變量類型。

5. 實際上cout和cin分別是ostream和istream類型的對象,>>和也涉及運算符重載等知識。

#include <iostream>
using namespace std;int main()
{int a;double b;char c;// 可以自動識別變量的類型cin>>a;cin>>b>>c;cout<<a<<endl;cout<<b<<" "<<c<<endl;return 0;
}

?我們這里的有里的一個優點是可以進行這里會自動識別變量類型。

endl是可以進行換行的,我們也可以這樣:cout<<b<<" "<<"\n"<<endl;

using namespace std展開,標準庫就全部暴露出來了,如果我們定義跟庫重名的類型/對 象/函數,就存在沖突問題。該問題在日常練習中很少出現,但是項目開發中代碼較多、規模 大,就很容易出現。所以建議在項目開發中使用,像std::cout這樣使用時指定命名空間 + using std::cout展開常用的庫對象/類型等方式。

4. 缺省參數

定義:

缺省參數是聲明或定義函數時為函數的參數指定一個缺省值。在調用該函數時,如果沒有指定實 參則采用該形參的缺省值,否則使用指定的實參。我們的缺省參數其實就是給了一個默認的值,

void Func(int a = 0)
{cout<<a<<endl;
}
int main()
{Func(); ? ? // 沒有傳參時,使用參數的默認值Func(10); ? // 傳參時,使用指定的實參return 0;
}

?我們使用缺省參數的時候可以不傳參數,使用默認參數。

缺省參數分類

1 全缺省

void Func(int a = 10, int b = 20, int c = 30){cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;}

2 半缺省

void Func(int a , int b = 20, int c = 30){cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;}

? ?注意: 1. 半缺省參數必須從右往左依次來給出,不能間隔著給

? ?2. 缺省參數不能在函數聲明和定義中同時出現 ?

//a.hvoid Func(int a = 10);// a.cppvoid Func(int a = 20){}// 注意:如果生命與定義位置同時出現,恰巧兩個位置提供的值不同,那編譯器就無法確定到底該
用那個缺省值

函數缺省這一功能對于我們不知道一個參數要傳什么時,我們可以不傳,,還是很方便。

5. 函數重載

函數的重載是指:是函數的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數,這 些同名函數的形參列表(參數個數 或 類型 或 類型順序)不同,常用來處理實現功能類似數據類型 不同的問題。不能是返回值不同,因為我們的返回值可以不進行接受,南無我們就不知道是哪一個函數了,

例子:

#include<iostream>
using namespace std;
// 1、參數類型不同
int Add(int left, int right)
{cout << "int Add(int left, int right)" << endl;return left + right;
}
double Add(double left, double right)
{cout << "double Add(double left, double right)" << endl;return left + right;
}
// 2、參數個數不同
void f()
{cout << "f()" << endl;
}
void f(int a)
{cout << "f(int a)" << endl;
}
// 3、參數類型順序不同
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}
int main()
{Add(10, 20);Add(10.1, 20.2);f();f(10);f(10, 'a');f('a', 10);return 0;
}

?

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

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

相關文章

LeetCode 二分查找

1.題目要求: 給定一個 n 個元素有序的&#xff08;升序&#xff09;整型數組 nums 和一個目標值 target &#xff0c;寫一個函數搜索 nums 中的 target&#xff0c;如果目標值存在返回下標&#xff0c;否則返回 -1。示例 1:輸入: nums [-1,0,3,5,9,12], target 9 輸出: 4 解…

論文閱讀 - Intriguing properties of neural networks

Intriguing properties of neural networks 經典論文、對抗樣本領域的開山之作 發布時間&#xff1a;2014 論文鏈接: https://arxiv.org/pdf/1312.6199.pdf 作者&#xff1a;Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow,…

信息技術課堂上如何有效防止學生玩游戲?

防止學生在信息技術課堂上玩游戲需要綜合運用教育策略和技術手段。以下是一些有效的措施&#xff0c;可以用來阻止或減少學生在課堂上玩游戲的行為&#xff1a; 1. 明確課堂規則 在課程開始之初&#xff0c;向學生清楚地說明課堂紀律&#xff0c;強調不得在上課時間玩游戲。 制…

電阻負載柜的工作原理是什么?

電阻負載柜是用于模擬電網中各種負載特性的設備&#xff0c;廣泛應用于電力系統、新能源發電、電動汽車充電站等領域。其工作原理主要包括以下幾個方面&#xff1a; 1. 結構組成&#xff1a;電阻負載柜主要由變壓器、調壓器、電阻器、控制器、保護裝置等部分組成。其中&#xf…

理解神經網絡的通道數

理解神經網絡的通道數 1. 神經網絡的通道數2. 輸出的寬度和長度3. 理解神經網絡的通道數3.1 都是錯誤的圖片惹的禍3.1.1 沒錯但是看不懂的圖3.1.2 開玩笑的錯圖3.1.3 給人誤解的圖 3.2 我或許理解對的通道數3.2.1 動圖演示 1. 神經網絡的通道數 半路出嫁到算法崗&#xff0c;額…

數據防泄密軟件精選|6款好用的數據防泄漏軟件強推

某科技公司會議室&#xff0c;CEO張總、CIO李總、信息安全主管王經理正圍繞最近發生的一起數據泄露事件展開討論。 張總&#xff08;憂慮&#xff09;: 大家&#xff0c;這次的數據泄露事件對我們來說是個沉重的打擊。客戶信息的外泄不僅損害了我們的信譽&#xff0c;還可能面…

DAY2:插件學習

文章目錄 插件學習ClangGoogle TestCMakeDoxygen 收獲 插件學習 Clang 是什么&#xff1a;Clang 是指 LLVM 項目的編譯器的前端部分&#xff0c;支持對 C 家族語言(C、C、Objective-C)的編譯。Clang 的功能包括&#xff1a;詞法分析、語法分析、語義分析、生成中間中間代碼 L…

【源碼+文檔+調試講解】智能倉儲系統 JSP

摘 要 隨著科學技術的飛速發展&#xff0c;社會的方方面面、各行各業都在努力與現代的先進技術接軌&#xff0c;通過科技手段來提高自身的優勢&#xff0c;智能倉儲系統當然也不能排除在外。智能倉儲系統是以實際運用為開發背景&#xff0c;運用軟件工程開發方法&#xff0c;采…

Dubbo源碼解析-過濾器Filter

上篇我們介紹了消費端負載均衡的原理 Dubbo源碼解析-負載均衡-CSDN博客 因為篇幅問題&#xff0c;本文主單獨Dubbo消費端負載均原理&#xff0c;從dubbo源碼角度進行解析。 大家可以好好仔細讀一下本文。有疑問歡迎留言。 接著說明&#xff0c;讀Dubbo源碼最好是先對Spring源碼…

小車解決連接 Wi-Fi 后還不能上網問題

小車解決連接 Wi-Fi 后還不能上網問題 跟大家講講&#xff1a;為什么小車連接我們自己的熱點以后還是不能聯網呢&#xff1f; 小車連接我們的熱點以后需要訪問外面的網絡&#xff0c;我們訪問網絡使用域名來進行的&#xff0c;所以要對域名進行解析&#xff0c;但是小車原來的域…

【HarmonyOS NEXT】鴻蒙線程安全容器集collections.Map

collections.Map 一種非線性數據結構。 文檔中存在泛型的使用&#xff0c;涉及以下泛型標記符&#xff1a; K&#xff1a;Key&#xff0c;鍵V&#xff1a;Value&#xff0c;值 K和V類型都需為Sendable類型。 屬性 元服務API&#xff1a;從API version 12 開始&#xff0c…

Android 系統網絡、時間服務器配置修改

1.修改wifi 是否可用的檢測地址&#xff1a; 由于編譯的源碼用的是谷歌的檢測url,國內訪問不了&#xff0c;系統會認為wifi網絡受限&#xff0c;所以改成國內的地址 adb shell settings delete global captive_portal_https_urladb shell settings delete global captive_por…

貓咪浮毛太多怎么處理?6年鏟屎官最值得買的貓毛空氣凈化器分享

作為一位擁有6年鏟屎經驗的鏟屎官&#xff0c;家中既有寶寶又有毛孩子的鏟屎官家庭來說&#xff0c;空氣中的寵物異味和貓毛不僅影響生活質量&#xff0c;更關乎家人的健康。普通空氣凈化器雖然能夠提供基本的空氣凈化&#xff0c;但對于養貓家庭的特定需求&#xff0c;如去除寵…

捕獲 IPython 的輸出:深入探索 %%capture 命令的妙用

捕獲 IPython 的輸出&#xff1a;深入探索 %%capture 命令的妙用 在 IPython 的強大功能中&#xff0c;%%capture 魔術命令是一顆隱藏的寶石&#xff0c;它允許用戶捕獲執行單元格的輸出&#xff0c;無論是打印的文本、錯誤信息還是生成的圖像。這對于創建干凈的報告、自動化文…

使用 YOLOv8 實現人體姿態檢測

引言 在計算機視覺的各種應用中&#xff0c;人體姿態檢測是一項極具挑戰性的任務&#xff0c;它能夠幫助我們理解人體各部位的空間位置。本文將詳細介紹如何使用 YOLOv8 和 Python 實現一個人體姿態檢測系統&#xff0c;涵蓋模型加載、圖像預處理、姿態預測到結果可視化的全流…

回頭看,已過去6載

前言&#xff1a; 目前狀態比較不好&#xff0c;家里催著結婚&#xff0c;自己年紀慢慢變大&#xff0c;感覺很焦慮&#xff0c;時常不經意間感覺嘴角都是向下的&#xff08;os&#xff1a;希望看到這段沒有影響到你的心情&#xff0c;我只是想記錄一下it這幾年以及目前的狀態…

k8s中控制器DaemonSet簡介及用法

一、簡介 在 Kubernetes 中&#xff0c;DaemonSet 是一種控制器類型&#xff0c;用于確保集群中的每個節點運行一個特定的 Pod 實例。通常情況下&#xff0c;DaemonSet 被用來在集群的每個節點上運行一個特定的系統服務或者應用程序副本&#xff0c;例如日志收集器&#xff08;…

《基于 Kafka + Flink + ES 實現危急值處理措施推薦和范圍校準》

&#x1f4e2; 大家好&#xff0c;我是 【戰神劉玉棟】&#xff0c;有10多年的研發經驗&#xff0c;致力于前后端技術棧的知識沉淀和傳播。 &#x1f497; &#x1f33b; 近期剛轉戰 CSDN&#xff0c;會嚴格把控文章質量&#xff0c;絕不濫竽充數&#xff0c;歡迎多多交流。&am…

爬蟲-豆瓣讀書排行榜

獲取數據 requests庫 獲取數據環節需要用到requests庫。安裝方式也簡單 pip install requests 爬取頁面豆瓣讀書 Top 250 用requests庫來訪問 import requests res requests.get(https://book.douban.com/top250/) 解析&#xff1a; 導入requests庫調用了requests庫中的…

2024年文化研究與數字媒體國際會議 (CRDM 2024)

2024年文化研究與數字媒體國際會議 (CRDM 2024) 2024 International Conference on Cultural Research and Digital Media 【重要信息】 大會地點&#xff1a;珠海 大會官網&#xff1a;http://www.iccrdm.com 投稿郵箱&#xff1a;iccrdmsub-conf.com 【注意&#xff1a;稿將…