日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++起始(关键字,命名空间,缺省参数,函数重载(c语言为什么不支持函数重载))

發布時間:2023/11/30 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的這個命名空間中

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

    注意:早期標準庫將所有功能在全局域中實現,聲明在.h后綴的頭文件中,使用時只需包含對應頭文件即可,
    后來將其實現在std命名空間下,為了和C頭文件區分,也為了正確使用命名空間,規定C++頭文件不帶.h;舊
    編譯器(vc 6.0)中還支持<iostream.h>格式,后續編譯器已不支持,因此推薦使用+std的方式。
  • 使用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中編譯器只是簡單的加了一個前綴_

    總結

    以上是生活随笔為你收集整理的C++起始(关键字,命名空间,缺省参数,函数重载(c语言为什么不支持函数重载))的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。