CPP入門基礎

2021-08-03 06:25:52 字數 2173 閱讀 3110

定義

命名空間的名字在其所在作用域中是唯一的,命名控制項可以在全域性作用域或者其它作用域內部定義,但是不能在函式或者類的內部定義

:命名空間作用域不能以分號結束。

命名空間中的每個名字必須引用該命名空間中的唯一實體,命名空間中的實體稱為命名空間的成員,不同命名空間的成員可以具有相同的名字。

:: 作用域限定

命名空間內部各成員之間可以直接訪問,外部的**必須指出所引用成員名字定義在哪個命名空間中。標準c++庫中的所有元件都是在乙個被稱為std的名字空間中宣告和定義的。在採用標準c++的平台上使用標準c++庫中的元件,只要寫乙個using指示符:using namespace std;就可以直接使用標c++庫中的所有成員。或者 std::成員 的方式也可以使用c++庫里的成員

定義

函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,這組函式被稱為過載函式。過載函式通常用來命名一組功能相似的函式,這樣做減少了函式名的數量,避免了名字空間的汙染,對於程式的可讀性有很大的好處。

函式的過載的規則:

1. 函式名稱必須相同。

2. 引數列表必須不同(個數不同、型別不同、引數排列順序不同等)。

3. 函式的返回型別可以相同也可以不相同。

4. 僅僅返回型別不同不足以成為函式的過載。

c++ 支援函式過載的原因

c++支援函式過載的原因主要是c++的函式命名規則:

c++**在編譯時會根據引數列表對函式進行重新命名,例如void swap(int a, int b)會被重新命名為_swap_int_int,void swap(float x, float y)會被重新命名為_swap_float_float。當發生函式呼叫時,編譯器會根據傳入的實參去逐個匹配,以選擇對應的函式,如果匹配失敗,編譯器就會報錯,這叫做過載決議(overload resolution)。所以過載其實不存在找不到入口的情況,在編譯時已經進行了上述的重新命名。

概念:

在函式宣告或定義的時候給形參乙個預設的引數。這樣在呼叫該函式,如果沒有給實參,函式的這個形參就預設為這個值。

使用規則:

1、預設值必須從右往左給值

2、預設值必須為常量或全域性變數 (const/static/普通的 全域性變數 也可以作為預設引數)

3、預設引數只能出現在宣告或者定義的一處

4、不能把 const的全域性變數 作為預設值

5、預設值不構成函式過載,預設值並沒有賦予函式新的功能

特點:

預設值可能提高函式的易用性,但是也可能會降低函式的可理解性。所以得適當使用預設值。

例子:

#include 

void func(int x,int y=10,int z=20);//此處在宣告部分設定預設值

//void func(int x=20,int y=10,int z);這種預設值設定是不允許的

void main()

void func(int x,int y,int z)

作返回值

1. 不要返回乙個臨時變數的引用。

2. 如果返回物件出了當前函式的作用域依舊存在,可以使用引用返回,比值傳遞更高效。

int& add (int d1, int d2)

// int add ( int d1 , int d2)

void ()

{int a = 3, b = 4;

int c = add( a, b );

cout<<"c:"

<引用和指標的區別和聯絡

1. 引用只能在定義時初始化一次,之後不能改變指向其它變數(從一而終);指標變數的值可變。

2. 引用必須指向有效的變數,指標可以為空。

3. sizeof指標物件和引用物件的意義不一樣。sizeof引用得到的是所指向的變數的大小,而sizeof指標是物件位址的大小。

4. 指標和引用自增(++)自減(–)意義不一樣。

5. 相對而言,引用比指標更安全。

CPP入門基礎知識

一.命名空間 1.命名空間的定義 命名空間的名字在其所在作用域中是唯一的,命名空間可以在全域性作用域或者其它作用域內部定義,但是不能在函式或者類的內部定義,命名空間作用域不能以分號結束。1 每個命名空間都是乙個作用域 命名空間中的每個名字必須引用該命名空間中的唯一實體,命名空間中的實體稱為命名空間的...

CPP入門基礎知識

1 命名空間 命名空間相當於乙個更加靈活的全域性域,可以用花括號把檔案的一部分括起來,並以關鍵字namespace開頭給它起乙個名字 如下定義兩個命名空間 namespace aa1namespace aa2 int main 可以看到兩個變數名都可以用a 所以命名空間域解決了全域性命名衝突的問題 ...

cpp入門基礎知識

1.命名空間域是隨標準c 而引入的。它相當於乙個更加靈活的檔案域 全域性域 可以用花括號把檔案的一部分括起來,並以關鍵字namespace開頭給它起乙個名字 namespace name1 namespace name2 name1 a 3 name2 a 4 2.名字空間域解決全域性命名衝突的問題...