C++入門
- 關鍵字
- 命名空間
- 命名空間使用
- 輸入&輸出
- 預設引數(備胎)
- 函式多載(面試常考題)
- 名字修飾(name Mangling)
關鍵字
定義:C++系統中預定義的、在語言或編譯系統的實作中具有特殊含義的單詞,
例如關鍵字不能用作變數名、函式名等

命名空間
在C/C++中,變數、函式和后面要學到的類都是大量存在的,這些變數、函式和類的名稱將都存在于全域作用域中,可能會導致很多沖突,使用命名空間的目的是對識別符號的名稱進行本地化,以避免命名沖突或名字污染,namespace關鍵字的出現就是針對這問題的,
語法:
- 定義命名空間,需要使用到namespace關鍵字,后面跟命名空間的名字,然后接一對{}即可,{}中即為命名空間的成員,
- eg:namespace Aug {}
namespace Aug // Aug為命名空間的名稱
{
int rand = 0;//rand為Aug空間的成員
}
namespace N
{
int a;
int b;
int Add(int left, int right)
{
return left + right;
}
namespace M
{
int c;
int d;
int Sub(int left, int right)
{
return left - right;
}
}
}
注意:
- 命名空間中的內容,既可以定義變數,也可以定義函式,宏等
- 命名空間可以嵌套

注意:
同一個工程中允許存在多個相同名稱的命名空間,編譯器最后會合成同一個命名空間中,
命名空間使用

注意:
一個命名空間就定義了一個新的作用域,命名空間中的所有內容都局限于該命名空間中
第一種:加命名空間名稱及作用域限定符

第二種:使用using namespace 命名空間名稱引入

第三種:使用using將命名空間中成員引入

注意(重點):


輸入&輸出

使用cout標準輸出(控制臺)和cin標準輸入(鍵盤)時,必須包含< iostream >頭檔案以及std標準命名空間,
注意:早期標準庫將所有功能在全域域中實作,宣告在.h后綴的頭檔案中,使用時只需包含對應頭檔案即可,后來將其實作在std命名空間下,為了和C頭檔案區分,也為了正確使用命名空間,規定C++頭檔案不帶.h;舊編譯器(vc 6.0)中還支持<iostream.h>格式,后續編譯器已不支持,因此推薦使用 < iostream > +std的方式,

使用C++輸入輸出更方便,不需增加資料格式控制,比如:整形–%d,字符–%c等
預設引數(備胎)
預設引數是宣告或定義函式時為函式的引數指定一個默認值,
在呼叫該函式時,如果沒有指定實參則采用該默認值,否則使用指定的實參
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
void TestFunc(int a = 0)
{
cout << a << endl;
}
int main()
{
TestFunc(); // 沒有傳參時,使用引數的默認值,相當于TestFunc(0);
TestFunc(10); // 傳參時,使用指定的實參
}
全預設引數
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;
}
注意:
- 預設引數分為全預設引數和半預設引數
- 半預設引數必須從右往左依次來給出,不能間隔著給
- 預設引數不能在函式宣告和定義中同時出現
- 如果生命與定義位置同時出現,恰巧兩個位置提供的值不同,那編譯器就無法確定到底該用那個預設值,
- 預設值必須是常量或者全域變數
- C語言不支持(編譯器不支持)
函式多載(面試常考題)
函式多載:是函式的一種特殊情況,C++允許在同一作用域中宣告幾個功能類似的同名函式,這些同名函式的 形參串列(引數個數 或 型別 或 順序)必須不同,常用來處理實作功能類似資料型別不同的問題,
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int Add(int left, int right)
{
return left + right;
}
double Add(double left, double right)
{
return left + right;
}
long Add(long left, long right) {
return left + right;
}
int main()
{
Add(10, 20);
Add(10.0, 20.0);
Add(10L, 20L);
return 0;
}
名字修飾(name Mangling)

為什么C++支持函式多載,而C語言不支持函式多載呢?
- 在C/C++中,一個程式要運行起來,需要經歷以下幾個階段:預處理、編譯、匯編、鏈接,
- 通過用Linux操作gcc(撰寫C的編譯器)的函式修飾后名字不變,而g++(撰寫C++的編譯器)的函式修飾后變成【_Z+函式長度+函式名+型別首字母】,
采用gcc編譯完成后,函式名字的修飾沒有發生改變,

采用g++編譯完成后,函式名字的修飾發生改變,編譯器將函式引數型別資訊添加到修改后的名字中,

- 通過上面的解釋就知道C語言沒辦法支持多載,因為同名函式沒辦法區分,而C++是通過函式修飾規則來區分,只要引數不同,修飾出來的名字就不一樣,就支持了多載,
- 此外,函式多載要求引數不同,而跟回傳值沒關系,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303990.html
標籤:python
上一篇:【升職加薪必備架構圖】Springboot學習路線匯總(建議收藏)
下一篇:2021ICPC網路賽(第二場)
