C 函式過載 預設引數以及命名空間

2021-08-21 12:36:12 字數 1878 閱讀 4385

c++入門

在接觸c++之前太多人都說:「c++很難,非常難」。今天我也要開始一探這c++的水了,為了避免淹死,索性我也就不去那深水區蹚了,就在這淺灘裡走一走。

c++是一門通用的程式語言,廣泛應用於系統軟體與應用軟體的開發,而我一直一來學習的c語言幾乎是c++的乙個子集。所以c語言支援的語法c++基本都支援並且需要用到。c++在c的基礎上又多了很多的特性。下面我們就對於c++的基礎知識做乙個基本的學習和掌握。

1、c++的命名空間

首先我們明確一點,c++中的命名空間是用來解決全域性命名衝突的問題

先來看**:

//命名空間:名字的隔離,防止命名衝突

#include

#include

namespace my

namespace your

//這裡的my和your是兩個命名空間

//這樣一來我們可以使用兩個名字完全一樣的變數,而不會產生衝突。

using

namespace my;

//也可以使用這樣的方式將命名空間展開在全域性域中

//這樣一來當我們訪問乙個變數時,會先在全域性域中去找

//如果沒有找到則接著在展開的域中去找

int main()

命名空間的巢狀使用

#include

#include

namespace my

}int main()

2、c++的預設引數

//預設引數

//全預設:實現函式時所有的引數都給乙個值

//如果呼叫函式時沒有傳參則用這個給定的值

//如果函式呼叫時傳參了,則忽略對應的值

#include

#include

int add(int a = 1,int b = 2)

int main()

//半預設:函式定義時,部分形參賦予初值

//但只能從右往左依次預設

#include

#include

int add1(int a,int b,int c = 3)

int add2(int a,int b = 2,int c = 3)

//會報錯 此處不符合預設規則(從右往左依次預設)

int add3(int a,int b = 2,int c)

int main()

3、c++的函式過載

//函式過載

//在同一作用域內,一組函式的函式名相同,引數列表不同

//引數列表不同:引數的個數和型別不同。

//返回值型別可相同也可以不相同

#include

void fun1(int i)

void fun2(char c)

int main()

畫重點啦!!!

c++是如何實現函式的過載的???(函式名的修飾規則)

在linux下可以使用objdump檢視目標檔案中的函式名字的修飾

經過檢視我們發現相同函式名的修飾是不一樣的.

(通過將函式的引數的相關型別在修飾中加以標明)

這也就是說雖然兩個函式的名字一樣,但二者的修飾不一樣

因此我們可以通過函式名經過修飾之後的名字找到唯一乙個函式,以此實現函式過載

避免了函式重名的問題(c語言是不能有多個函式的函式名字一樣),即不支援函式過載

c 的過載,預設引數,以及命名空間

c 是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c 擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c 就適應的問題規模而論,大小由之。關於c 的幾個小方面的想法 c 支援函式...

c 命名空間 函式過載 預設引數

在c c 中,變數 函式和類都是大量存在的,這些變數 函式和類的名稱將都存在於全域性作用 域中,可能會導致很多衝突。使用命名空間的目的是對識別符號的名稱進行本地化,以 避免命名衝突或名字汙染,namespace 關鍵字的出現就是針對這種問題的。1.1 命名空間的定義 namespace n1 1.1...

C 命名空間 預設引數 函式過載

使用命名空間是要對識別符號的名稱進行本地初始化,避免命名衝突。定義命名空間需要用到namespace關鍵字,後跟命名空間的名字,在 內為命名空間的成員 普通的命名空間 namespace n1 巢狀的命名空間 namespace n2 namespace n3 同一工程中允許存在多個相同名稱的明明空...