最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++入門教程詳解之命名空間、函數(shù)重載、缺省參數(shù)

 更新時間:2023年06月05日 10:22:52   作者:派小星233  
這篇文章主要介紹了C++入門教程詳解之命名空間、函數(shù)重載、缺省參數(shù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一:命名空間

1.命名空間的意義 ① 在一個大型項目中,往往會有很多函數(shù)、類、變量等,如果不加以限制,不同的函數(shù)或類很可能會使用相同的名稱,這樣就會產(chǎn)生沖突。 ② 為了解決這個問題,C++引入了命名空間的概念,可以把相關(guān)的函數(shù)、類、變量等放在同一個命名空間下,從而避免沖突。 ③ 同時,命名空間還可以提高程序的可讀性和可維護(hù)性,方便例如debug的時候定位問題。
2.命名空間的定義 定義命名空間,需要使用到namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對{}即可,{} 中即為命名空間的成員。

代碼:

//命名空間
namespace stu
{
	//命名空間中可以定義變量/函數(shù)/類型
	int Add(int x, int y)
	{
		return x + y;
	}
	int goal = 50;
	struct Node
	{
		int data;
		struct Node* next;
	};
	//命名空間可以嵌套定義
	namespace teacher
	{
		//命名空間中可以定義變量/函數(shù)/類型
		int Add(int x, int y)
		{
			return x + y;
		}
		int goal = 100;
		struct Node
		{
			int data;
			struct Node* next;
		};
	}
}

注意:一個命名空間就定義了一個新的作用域,命名空間中的所有內(nèi)容都局限于該命名空間中。

3.如何使用命名空間中成員?
①加命名空間名稱及作用域限定符

代碼:

?#include <stdio.h>
//命名空間
namespace stu
{
	//命名空間中可以定義變量/函數(shù)/類型
	int Add(int x, int y)
	{
		return x + y;
	}
	int goal = 50;
	struct Node
	{
		int data;
		struct Node* next;
	};
	//命名空間可以嵌套定義
	namespace teacher
	{
		//命名空間中可以定義變量/函數(shù)/類型
		int Add(int x, int y)
		{
			return x + y;
		}
		int goal = 100;
		struct Node
		{
			int data;
			struct Node* next;
		};
	}
}
int main()
{
	printf("%d\n", stu::goal);
	printf("%d\n",stu::teacher::goal);
}
?

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

代碼:

using stu::goal;
//如果想使用嵌套空間中的goal,可以用using stu::teacher::goal
//但是兩個不能同時存在,否則會導(dǎo)致多次聲明
int main()
{
	printf("%d\n",goal);
}

③使用using namespace命名空間名稱引入(相當(dāng)于把命名空間全部展開)

代碼:

using namespace stu;
//想訪問嵌套空間的goal,可以using namespace stu::teacher
//但是兩個不能同時存在,否則goal不明確
int main()
{
	printf("%d\n",goal);
}
小結(jié)① C++中即使是一些比較重要的聲明定義(比如與輸出有關(guān)的cout),也是放在一個命名空間中的,在沒有展開命名空間或者引入成員的情況下,cout是可以做變量,函數(shù)名的。 ②如果要寫一個較大的項目,上面三種使用命名空間中成員的方法 直接引入命名空間(展開)的方式是非常不好的,很容易造成命名沖突 (using namespace 命名空間)

如果并不需要頻繁使用,我們可以用加命名空間名稱及作用域限定符的方式來使用

(命名空間::成員)

如果只是需要頻繁使用某一個成員,我們可以使用using將命名空間中單個成員引入
(using 命名空間::成員)

③可以存在多個同名的命名空間,編譯器最后會把他們合成一個。

(比如定義兩個同名命名空間,展開之后兩個空間中的成員都可以使用)

二:C++的輸入輸出

代碼:

說明:

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

②這里涉及到了類和對象、運算符重載、IO流、函數(shù)重載的知識,大家只需要先有個大致印象,后續(xù)的學(xué)習(xí)會一一解答這里的疑問。

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

<<是流插入運算符, >> 是流提取運算符。 ●使用C++輸入輸出更方便,不需要像printf/scanf輸入輸出時那樣,需要手動控制格式。 C++的輸入輸出可以自動識別變量類型(本質(zhì)是函數(shù)重載)

③早期標(biāo)準(zhǔn)庫將所有功能在全局域中實現(xiàn),聲明在.h后綴的頭文件中,使用時只需包含對應(yīng)頭文件即可,后來將其實現(xiàn)在std命名空間下,為了和C頭文件區(qū)分,也為了正確使用命名空間, 規(guī)定C++頭文件不帶.h;舊編譯器(vc 6.0)中還支持<iostream.h>格式,后續(xù)編譯器已不支持,因此推薦使用<iostream>+std的方式。

三:函數(shù)重載

1.概念 是函數(shù)的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數(shù),這些同名函數(shù)的形參列表(參數(shù)個數(shù) 或 類型 或 類型順序)不同,常用來處理實現(xiàn)功能類似數(shù)據(jù)類型不同的問題。
2.實例

代碼:

?#include <iostream>
using namespace std;
函數(shù)重載
void fun(int x, int y)
{
	cout << "int x,int y" << endl;
}
void fun(double x, double y)
{
	cout << "double x,double y" << endl;
}
void fun()
{
	cout << "NULL" << endl;
}
int main()
{
	fun(2, 0);
	//參數(shù)類型不同
	fun(2.0, 0.0);
	//參數(shù)個數(shù)不同
	fun();
	return 0;
}
?

注意:函數(shù)返回值不同不構(gòu)成函數(shù)重載。

3.為什么C++能支持函數(shù)重載而C不行?

其實主要就是一句:C++有獨特的函數(shù)名修飾規(guī)則。

一個C/C++程序的形成需要經(jīng)過預(yù)處理、編譯、匯編、鏈接。

①預(yù)處理:進(jìn)行宏的替換、頭文件展開、注釋的刪除(空格替換)。

②編譯:將代碼轉(zhuǎn)化為匯編代碼(這個階段主要負(fù)責(zé)語法分析、符號匯總、

詞法分析、語義分析)。

③匯編:將匯編代碼轉(zhuǎn)化為二進(jìn)制機器指令,生成符號表。

④鏈接:匯編完成后會把對應(yīng)源文件生成目標(biāo)文件,鏈接階段就是把這些目標(biāo)文件

進(jìn)行鏈接(這個過程很復(fù)雜)。

我們并不需要很在意這個過程的實現(xiàn)細(xì)節(jié),要點在符號匯總和生成符號表。

【1】先看一段C語言代碼

main.c文件中沒有Add函數(shù)的定義,但是存在聲明,沒有語法錯誤,可以通過編譯。

Add.c文件中包含了Add函數(shù)的具體實現(xiàn)。

匯編完成后這兩個源文件會生成對應(yīng)符號表。

鏈接的過程中會進(jìn)行符號表的合并,在main.obj(main.c匯編完成后生成的目標(biāo)文件)中沒有Add函數(shù)的定義,但是Add.obj中有,最后合并為_Add(0x200),可以找到Add函數(shù)的地址進(jìn)行調(diào)用。

在上述基礎(chǔ)上如果我們多定義一個同名函數(shù),生成的符號表中兩個函數(shù)地址都是有效的,無法區(qū)分應(yīng)該調(diào)用那個,就會導(dǎo)致鏈接錯誤。

我們不難發(fā)現(xiàn),C語言沒辦法處理這種情況是因為符號名相同導(dǎo)致的沖突,如果我們在生成符號表的時候依據(jù)函數(shù)參數(shù)的不同來生成不同符號名,不就可以解決這種情況了嗎?

【2】我們把上面的情況放到C++

通過這里就理解了C語言沒辦法支持重載,因為同名函數(shù)沒辦法區(qū)分。C++是通過函數(shù)修飾規(guī)則來區(qū)分,只要參數(shù)不同,修飾出來的名字就不一樣,就支持了重載。

其中返回值并沒有納入修飾規(guī)則,因此只有返回值不同無法構(gòu)成函數(shù)重載。

四:缺省參數(shù)

1.概念 缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值。在調(diào)用該函數(shù)時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參。 2.實例

【2】半缺省參數(shù)

4.注意點

半缺省參數(shù)必須從右往左依次來給出,不能間隔著給

②缺省參數(shù)不能在函數(shù)聲明和定義中同時出現(xiàn),建議缺省參數(shù)只在聲明中設(shè)定

③缺省值必須是常量和全局變量

到此這篇關(guān)于C++入門教程詳解之命名空間、函數(shù)重載、缺省參數(shù)的文章就介紹到這了,更多相關(guān)C++命名空間、函數(shù)重載、缺省參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++之運算符重載的實例(日期類實現(xiàn)方式)

    C++之運算符重載的實例(日期類實現(xiàn)方式)

    這篇文章主要介紹了C++之運算符重載的實例(日期類實現(xiàn)方式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • 詳解C++右值引用

    詳解C++右值引用

    很多初學(xué)者都感覺右值引用晦澀難懂,其實不然。右值引用只不過是一種新的 C++ 語法,真正理解起來有難度的是基于右值引用引申出的2種 C++ 編程技巧,分別為移動語義和完美轉(zhuǎn)發(fā)。本節(jié)給讀者講解什么是右值引用以及它的基本用法。
    2021-06-06
  • C++中Pimpl的慣用法詳解

    C++中Pimpl的慣用法詳解

    Pimpl(Pointer?to?Implementation)是一種常見的?C++?設(shè)計模式,用于隱藏類的實現(xiàn)細(xì)節(jié),本文將通過一個較為復(fù)雜的例子,展示如何使用智能指針來實現(xiàn)?Pimpl?慣用法,需要的可以參考下
    2023-09-09
  • C++?Cmake使用詳細(xì)教程(看這一篇就夠了!)

    C++?Cmake使用詳細(xì)教程(看這一篇就夠了!)

    CMake是一個比make更高級的編譯配置工具,它可以根據(jù)不同平臺、不同的編譯器,生成相應(yīng)的Makefile或者vcproj項目,下面這篇文章主要給大家介紹了關(guān)于C++?Cmake使用的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 帶你搞懂C++ LeeCode 二叉樹的中序遍歷

    帶你搞懂C++ LeeCode 二叉樹的中序遍歷

    中序遍歷(LDR)是二叉樹遍歷的一種,也叫做中根遍歷、中序周游。在二叉樹中,中序遍歷首先遍歷左子樹,然后訪問根結(jié)點,最后遍歷右子樹
    2021-07-07
  • C++?實現(xiàn)單鏈表創(chuàng)建、插入和刪除

    C++?實現(xiàn)單鏈表創(chuàng)建、插入和刪除

    這篇文章主要介紹了C++?實現(xiàn)單鏈表創(chuàng)建、插入和刪除方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Windows環(huán)境給FFmpeg集成AVS3解碼器

    Windows環(huán)境給FFmpeg集成AVS3解碼器

    libuavs3d是AVS3標(biāo)準(zhǔn)的解碼器,支持windows/linux/arm/ios等所有常用平臺,在移動端最高支持4K/30fps視頻實時解碼,解碼速度大幅領(lǐng)先AV1開源解碼器dav1d和aomdec,由于FFmpeg默認(rèn)未啟用libuavs3d,因此需要重新配置FFmpeg,標(biāo)明啟用libuavs3d,然后重新編譯安裝FFmpeg
    2024-05-05
  • c++冒泡排序示例分享

    c++冒泡排序示例分享

    冒泡排序是一種計算機科學(xué)領(lǐng)域的較簡單的排序算法,這篇文章主要介紹了c++冒泡排序示例,需要的朋友可以參考下
    2014-03-03
  • C++多繼承同名隱藏實例詳細(xì)介紹

    C++多繼承同名隱藏實例詳細(xì)介紹

    多繼承可以看作是單繼承的擴(kuò)展。所謂多繼承是指派生類具有多個基類,派生類..本文將對C++多繼承同名隱藏實例進(jìn)行分析
    2012-11-11
  • c++結(jié)合opencv如何實現(xiàn)讀取多張圖片并顯示

    c++結(jié)合opencv如何實現(xiàn)讀取多張圖片并顯示

    這篇文章主要介紹了c++結(jié)合opencv如何實現(xiàn)讀取多張圖片并顯示問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

杭州市| 嘉峪关市| 云阳县| 梨树县| 乐陵市| 镇平县| 麻江县| 巴塘县| 德州市| 隆化县| 南华县| 玉林市| 许昌市| 苍南县| 沧源| 龙州县| 肇州县| 灵台县| 虞城县| 华宁县| 姜堰市| 萨迦县| 遂川县| 高陵县| 介休市| 花垣县| 井研县| 朔州市| 阿荣旗| 双鸭山市| 平远县| 马公市| 嘉兴市| 吉安县| 砚山县| 彩票| 永安市| 巴中市| 东兰县| 汉阴县| 和硕县|