C++起始(關鍵字,命名空間,缺省參數,函數重載(c語言為什么不支持函數重載))

1. C++關鍵字(C++98)

在這里插入圖片描述

2. 命名空間

在這里插入圖片描述
在C/C++中,變量、函數和后面要學到的類都是大量存在的,這些變量、函數和類的名稱將都存在于全局作用
域中,可能會導致很多沖突。使用命名空間的目的是對標識符的名稱進行本地化,以避免命名沖突或名字污
染,namespace關鍵字的出現就是針對這種問題的。

命名空間定義

可以放變量,也可以放函數
此時程序中有三個a
在這里插入圖片描述
可以通過編譯
在這里插入圖片描述
而我們打印一下,發現a是20在這里插入圖片描述
為什么?

因為近

訪問全局變量中的a
在這里插入圖片描述
訪問命名空間里的a
在這里插入圖片描述
命名空間可以嵌套
在這里插入圖片描述
訪問N3里面的變量
在這里插入圖片描述

如果在一個工程中出現了相同名字的命名空間,那么編譯器就把這些名字相同的命名空間合并到一起了
注意:一個命名空間就定義了一個新的作用域,命名空間中的所有內容都局限于該命名空間中
~~

命名空間的使用

1,直接在成員面前加N1::
2.using N1::a;		使用這種方法相當于把a作為全局變量
3.using namesapce  N1  告訴編譯器,把當前N1這個命名空間里的全部內容當作全局變量

3. C++輸入&輸出

c中printf函數在打印時需要進行格式控制
以前是iostream.h 但為了和c語言區分 所以去掉.h。cout在系統中給定的一個名字叫做std的這個命名空間中

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

    注意:早期標準庫將所有功能在全局域中實現,聲明在.h后綴的頭文件中,使用時只需包含對應頭文件即可,
    后來將其實現在std命名空間下,為了和C頭文件區分,也為了正確使用命名空間,規定C++頭文件不帶.h;舊
    編譯器(vc 6.0)中還支持<iostream.h>格式,后續編譯器已不支持,因此推薦使用+std的方式。
  2. 使用C++輸入輸出更方便,不需增加數據格式控制,比如:整形–%d,字符–%c

在這里插入圖片描述
在這里插入圖片描述

4. 缺省參數

C++中函數的參數也可以配備胎

4.1 缺省參數概念
缺省參數是聲明或定義函數時為函數的參數指定一個默認值。在調用該函數時,如果沒有指定實參則采用該默
認值,否則使用指定的實參。
在這里插入圖片描述
缺省參數分類
所有參數都帶有默認值

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

只有一部分參數帶有默認值(從右往左給)
void TestFunc(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}

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

注意:
1 半缺省參數必須從右往左依次來給出,不能間隔著給實參匹配從左往右
2. 缺省參數不能在函數聲明和定義中同時出現。(如果值不一樣會沖突,一般會在聲明中給出,)
3.缺省值必須是常量或者全局變量
4 C語言不支持(編譯器不支持)

5. 函數重載

自然語言中,一個詞可以有多重含義,人們可以通過上下文來判斷該詞真實的含義,即該詞被重載了。
比如:以前有一個笑話,國有兩個體育項目大家根本不用看,也不用擔心。一個是乒乓球,一個是男足。前者
是“誰也贏不了!”,后者是“誰也贏不了!”
5.1 函數重載概念
函數重載:是函數的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數,這些同名函數的形
參列表(參數個數 或 類型 或 順序)必須不同
,常用來處理實現功能類似數據類型不同的問題

編譯期間,編譯器會推演實參的類型
在這里插入圖片描述
參數類型一定只能是其中一個函數的全部類型
在這里插入圖片描述
同一個作用域,同一個名字,參數列表不能一樣,否則不能重載,與返回值類型相同沒關系。
參數列表不同:個數,類型,類型的次序。

在c語言中不支持函數重載
在這里插入圖片描述

在這里插入圖片描述

為什么c中不支持函數重載?

在這里插入圖片描述
編譯可以通過,這個函數連函數體都沒有怎么可能會編譯通過?
在編譯期間不會找函數具體的問題,因為編譯器看到有函數聲明,在當前文件沒有,但其他文件中可能有
在鏈接期間。編譯器找這個函數地址,找不到報錯。

在這里插入圖片描述
我們可以看到,我們在寫函數時用的名字時Add,而編譯器在找這個函數時,重新修改了這個名字,把Add修改為_Add。
在這里插入圖片描述
讓我們把文件改回成c++

在這里插入圖片描述
在這里插入圖片描述
編譯器把名字重新命名為~~?Add@@YAHHH@Z~~
在這里插入圖片描述
我們再次調用兩個Add函數在c++環境下,我們可以看到報錯,
(?Add@@YAHHH@Z)
(?Add@@YANNN@Z)

編譯器重新給了兩個函數不同的名字
我們再看一個例子在這里插入圖片描述
**(?Add@@YAHHH@Z)
(?Add@@YANNN@Z)
(?Add@@YANHN@Z)**我們可以知道在VS編譯器中,H代表整形,N代表浮點型。
而在c中編譯器只是簡單的加了一個前綴_

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

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

相關文章

va_list和vsnprintf、getopt

原理解釋&#xff1a; VA_LIST 是在C語言中解決變參問題的一組宏&#xff0c;在<stdarg.h>頭文件下。 VA_LIST的用法&#xff1a; &#xff08;1&#xff09;首先在函數里定義一具VA_LIST型的變量&#xff0c;這個變量是指向參數的指針 &#xff08;2&a…

GitHub相關

git是一個版本控制工具. 主要解決三個問題 代碼被喵星人吃掉了.產品經理反復修改需求, 需要同時維護多個版本代碼.多人協同開發. 安裝 git for windows 這個是一個git的windows系統的命令行版本 https://git-scm.com/downloads 下載會很慢很慢 使用 Github 創建項目 注冊…

linux中bin與sbin目錄的作用及區別介紹

在linux系統中&#xff0c;有兩個重要的目錄&#xff1a;bin與sbin&#xff0c;分別包括/bin、/usr/bin/與/sbin、/usr/sbin/。 bin: bin為binary的簡寫&#xff0c;主要放置系統的必備執行文件&#xff0c;例如: cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、m…

c++起始(名詞修飾,extern “C” ,引用)

名字修飾(name Mangling) 在C/C中&#xff0c;一個程序要運行起來&#xff0c;需要經歷以下幾個階段&#xff1a;預處理、編譯、匯編、鏈接。 Name Mangling是一種在編譯過程中&#xff0c;將函數、變量的名稱重新改編的機制&#xff0c;簡單來說就是編譯器為了區分各 個函數…

Linux進程間通信方式--本地socket

先上一個代碼 服務端&#xff1a; [cpp] view plaincopy //s_unix.c #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #define UNIX_DOMAIN "/tmp/UNIX.domain" int main(void) { so…

extern和static的區別

c語言中的 static&#xff1a; 修飾局部變量&#xff1a;存放在靜態數據區&#xff0c;生命周期位整個程序結束&#xff0c;但作用于仍為函數局部。 修飾全局變量&#xff1a;無法被同一工程其他源文件訪問。 修飾函數&#xff1a;與全局變量類似。 extern&#xff1a; 可被…

RT5350原廠SDK及AP移植步驟詳解

最近想搞一下rt5350&#xff0c;所以找了個原廠的SDK包進行了編譯&#xff0c;很快路由器就可以用了&#xff0c;把我的編譯操作步驟寫了下分享給更多的愛好者&#xff0c;供大家參靠&#xff0c;下一步準備移植攝像頭玩玩。有興趣的可以一起交流。 RT5350移植Toolchain工具的安…

linux系統編程之進程概念(操作系統---管理,進程創建,進程狀態,進程優先級, 環境變量,程序地址空間,進程O(1)調度方法)

系統編程&#xff1a; 進程概念->進程控制->基礎IO->進程間通信->進程信號->多線程進程概念 馮諾依曼體系結構----現代計算機硬件體系結構 馮諾依曼體系結構----現代計算機硬件體系結構 計算機五大硬件單元&#xff1a;輸入設備&#xff1a;鍵盤輸出設備&#…

Make Menuconfig詳解 (配置內核選擇)

Make Menuconfig簡介 make menuconfig 圖形化的內核配置make mrproper -----刪除不必要的文件和目錄. #make config&#xff08;基于文本的最為傳統的配置界面&#xff0c;不推薦使用&#xff09; #make menuconfig&#xff08;基于文本選單的配置界面&#xff0c;字符終端下…

Linux系統編程之進程控制(進程創建,fork函數,進程中止,進程等待,程序替換)

進程創建 fork()------復制&#xff0c;返回值&#xff0c;寫時復制 vfork()創建子進程—子進程與父進程共用同一塊虛擬地址空間&#xff0c; 為了防止調用棧混亂&#xff0c;因此阻塞父進程直到子進程調用exit&#xff08;&#xff09;退出或者進行程序替換 vfork創建的子…

Linux內核配置系統淺析

隨著 Linux 操作系統的廣泛應用&#xff0c;特別是 Linux 在嵌入式領域的發展&#xff0c;越來越多的人開始投身到 Linux 內核級的開發中。面對日益龐大的 Linux 內核源代碼&#xff0c;開發者在完成自己的內核代碼后&#xff0c;都將面臨著同樣的問題&#xff0c;即如何將源代…

Linux系統編程下做一個簡易的shell

自主實現一個shell--------minshell shell&#xff1a;命令行解釋器-------解釋執行用戶的輸入&#xff08;完成相對應的功能&#xff09; 步驟 1. 獲取標準輸入中的字符串 2. 對字符串進行解析[ls -l -a][ls ] [-l ] [-a] 3. 創建子進程 4. 子進程中進行程序替換 5. 父進程…

C++起始(內聯函數,宏的優缺點,const關鍵字,auto關鍵字(C++11)基于范圍的for循環(C++11). 指針空值nullptr(C++11))

內聯函數 概念 以inline修飾的函數叫做內聯函數&#xff0c;編譯時C編譯器會在調用內聯函數的地方展開&#xff0c;沒有函數壓棧的開銷&#xff0c; 內聯函數提升程序運行的效率 函數前增加inline關鍵字將其改成內聯函數&#xff0c;在編譯期間編譯器會用函數體替換函數的調用…

linux內核中的匯編語言

在Linux內核代碼中&#xff0c;有一部分是用匯編語言編寫的。其大部分是關于中斷與異常處理的底層程序&#xff0c;還有就是與初始化有關的程序&#xff0c;以及一些核心代碼中調用的公用子程序。 用匯編語言編寫內核代碼中的部分代碼&#xff0c;大體上是出于如下幾個方面考慮…

數據結構課程設計---c語言實現通訊錄(動態擴容+文件存儲)

1 題目一 &#xff1a; 通訊錄 1.1問題描述 編寫一個通訊錄管理系統&#xff0c;以把所學數據結構知識應用到實際軟件開發中去。每條信息至包含 &#xff1a;姓名&#xff08;NAME &#xff09;街道&#xff08;STREET&#xff09;城市&#xff08;CITY&#xff09;郵編&#…

linux內核panic

1. Linux Kernel Panic的產生的原因 panic是英文中是驚慌的意思&#xff0c;Linux Kernel panic正如其名&#xff0c;linux kernel不知道如何走了&#xff0c;它會盡可能把它此時能獲取的全部信息都打印出來。 有兩種主要類型kernel panic&#xff0c;后面會對這兩類panic做詳細…

數據結構課程設計------c實現散列表(二次探測再哈希)電話簿(文件存儲)

題目二 &#xff1a;散列表的設計與實現 2.1問題描述 設計散列表實現電話號碼查找系統&#xff0c;使得平均查找長度不超過2基本要求 &#xff08;1&#xff09;設每個記錄有下列數據項&#xff1a;電話號碼、用戶名、地址&#xff1b; &#xff08;2&#xff09;從鍵盤輸入各…

科技論文----論搜索引擎現狀及發展趨勢

搜索引擎現狀及發展趨勢 【摘要】 隨著最近10年中國互聯網的快速發展菜互聯網已經徹底改變了人們的生活方式&#xff0c;而在互聯網的發展過程中。搜索引擎發揮了巨大的推動作用。本文對搜索引擎的發展歷史采用的技術&#xff0c;發展現狀出現的問題以及未來發展方向進行了綜述…

inittab文件格式

/etc/inittab文件是Linux系統第一個進程init的配置文件。其每個記錄占一行&#xff0c;每行最多512個字符。該文件的每個記錄的格式為&#xff1a; id:runlevel:action:process 其中&#xff0c;id是一個不超過4個字符的標識&#xff0c;用來唯一標識一條記錄。runlevel表明該條…

數據結構課程設計------掃雷游戲(升級版,可展開)

本程序由團隊中的一個人所寫&#xff0c;本人看懂并寫下此文章 題目&#xff1a;掃雷 3.1問題描述 掃雷游戲 [基本要求] &#xff08;1&#xff09;完成棋盤的初始化并在標準顯示器中顯示 &#xff08;2&#xff09;通過輸入行列值確定用戶輸入 &#xff08;3&#xff09;游…