C++基礎學習_01ios
基礎知識:1.命名空間,2.IO流(輸入輸入),3.參數缺省,4.函數重載
函數
1.命名空間學習
做用:對標識符的名稱進行本地化,避免命名衝突spa
定義:namaspace space_name { 空間成員}3d
空間成員能夠是定義變量,也能夠是定義函數code
特色:可獨自命名,可進行空間嵌套,可分段定義blog
注意:分段定義時,容許命名空間的名稱相同,可是空間成員不能相同,由於編譯器會將命名空間名稱相同的合併到一塊兒,空間成員若有相同則會產生重定義ci
使用:做用域限定符---" :: ''作用域
1>空間名稱 做用域限定符 空間成員編譯器
2>使用using 將命名空間的成員引入
using space_name :: space_number; ---將space_name空間中指定的空間成員展開到當前的做用域中
3>使用using namespace 空間名稱 // 將空間名稱引入
using namespace space_name; ---將space_name空間中全部的空間成員都展開到當前的做用域中<不推薦使用,容易產生命名衝突>
使用說明:使用using 會將命名空間中的空間成員展開到當前做用域
若當前做用域爲全局域,則能夠全局範圍使用
若當前做用域爲局部域,則只能在局部範圍使用
// 單獨使用 namespace a1{ int a = 10; int Add(int x, int y){ return x + y; } } // 分段使用 namespace a1{ int b = 10; int Sub(int x, int y){ return x - y; } } // 嵌套使用 namespace a2{ int a = 10; int Add(int x, int y){ return x + y; } namespace a3{ int c = 20; int Sub(int x, int y){ return x - y; } } } int main(){ // 命名空間的使用 a1::b; a1::Sub(10, 20); return 0; }
2.IO流(輸入輸出)
使用cout標準輸出(控制檯)與cin標準輸入(鍵盤)時,必須包含頭文件<iostream>和std標準命名空間;
頭文件:#include<iostream>
輸出流 cout
int a = 10;
int b = 20;
std::cout << "a = " << a << "\n";
std::cout << "b = " << b << "\n";
輸入流 cin
char a; int b; double c;
std::cin >> a >> b >> c
能夠分開流入,也能夠直接流入
能夠看出cout、cin都須要std::引用,因此它們屬於std命名空間中的空間成員,能夠在全局域中直接展開
eg usinf std::cout;
cout << "Hello world\n";
cin >>a >>b >> c;
3.缺省參數
定義:在定義或聲明一個函數時,爲形參設置一個默認值,若是沒有進行傳參,函數將會默認使用提早設置好的形參默認值
using std::endl; void func(int a = 10){ cout << a << endl; } int main(){ cout << "未傳形參值\n"; func(); cout << "傳形參值\n"; func(20); return 0; }
根據參數默認值是否徹底設置,能夠分爲:全缺省參數和半缺省參數
須要注意:
1.半缺省參數必須從右往左給出,不能間隔給出
2.缺省參數不能在函數聲明和定義中同時出現
3.缺省參數值必須是常量或全局變量
using std::endl; // 全缺省參數 void func_1(int a = 10, int b = 20, int c = 30){ cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; } // 半缺省參數 void func_2(int a, int b = 20, int c = 30){ cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; }
4.函數重載
1-函數重載(搞很差就會函數重定義)
同名函數的形參列表必須不一樣:參數類型不一樣 或 參數個數不一樣 或 參數順序不一樣
<1>void fun_1(int a);
<2>void fun_1(int a, int b);
<3>int fun_1(int a, int b);
<1><2>構成函數重載,<3>與<2>構成函數重定義
說明:函數修飾符不影響函數重載,也就是說函數重載只看形參列表的區別
2-函數名修飾規則 以Linux系統下顯示結果進行說明
函數名修飾時,<從左往右>以參數類型的第一個字符開頭進行修飾
3-extern "C" 通常用於C/C++混合編譯時聲明
告訴編譯器,將該函數按照C語言編譯規則進行編譯
// 用於聲明函數風格爲C風格 extern "C" int Add(int x, int y){ printf("x + y = "); return x + y; } int main(){ Add(1, 2); return 0;
思考幾個問題:
1.什麼狀況下兩個函數才能造成函數重載?
函數名相同,而形參列表不一樣。不一樣之處在於:類型不一樣 或 個數不一樣 或 順序不一樣
2.C語言爲何不支持函數重載?
C語言編譯器底層對函數名稱修飾過於簡單,只是進行函數名下劃線處理,不會造成函數重載,只會是重定義
3.C++中函數重載底層是怎麼處理的?
利用函數的形參類型、個數、順序的不一樣,使用每一個形參的類型的首個字符進行組合造成「修飾符」
利用三者的不一樣,能夠組合成不一樣的「修飾符」,來對函數名進行修飾,使之不會發生函數名衝突
4.C++中可否將一個函數按照C風格來編譯?
能夠,必須對函數進行 extern "C" 聲明