大家好啊,這里是c++之旅第三彈,跟隨我的步伐來開始這一篇的學習吧!
如果有知識性錯誤,歡迎各位指正!!一起加油!!
創作不易,希望大家多多支持哦!
?
一.命名空間;
1.命名空間的作用:
解決同名實體的沖突問題,同名變量可以通過括號的作用域來確定使用的是哪一個變量,而函數和類型(比如自定義的結構體類型)則不可以通過作用域來進行區別,所以使用命名空間來區分。提供代碼的模塊化和組織化,并提高代碼的可讀性和可維護性。
2.括號的分類:
定義域和作用域
(1)定義域:定義了一個結構體類型這種大括號就是定義域,后面加分號;
eg:
struct MyPoint
{
int x, y;
};//定義域
(2)作用域:函數體和命名空間這種用來區分管理的代碼區域的就是作用域,后面不加分號
eg:
namespace MyMath
{
int hp;//不建議在命名空間中進行變量的定義,因為引用開放命名空間后可能會導致變量的重命名沖突問題,這樣反而更不好管理代碼 //空間成員一般有:函數聲明,類型定義
}//作用域
在自己寫命名空間時,一般會寫在頭文件中,因為命名空間里面的函數聲明和類型定義一般就在頭文件中
3.定義命名空間的注意事項:
(1)、命名空間標識符必須滿足標識符的命名規則和命名規范,習慣名字唯一,通常以開發團隊的名字(項目名)來命名
(2)、命名空間可以在全局,也可以在局部(命名空間可以接受嵌套定義),但不能在函數內和類中定義!!!
(3) 、注意命名污染,盡量規避同名的出現,如果兩個命名空間名同名,那么就會合并兩個命名空間
4.命名空間的訪問:
通過作用域運算符 (::) 訪問命名空間中的成員
(1)、using 聲明:using 命名空間名稱 :: 空間成員名稱 ;
放開一個成員的可見性,這一個成員可以在空間外可見 ( 比較容易避免出現命名污染 )
eg:using std::string;
(2)、using 指示:using namespace 命名空間名 ;
放開該命名空間的所有權限(所有成員都在空間外可見),適用于該空間的大部分成員都需要經常被使用
eg:using namespace std;//這個語句在c++中經常可以看到,這是因為std命名空間是一個c++語言標準庫中的命名空間
(3)、命名空間名稱 :: 空間成員名稱,使用時直接訪問空間下的某一個成員(一般用于該成員不經常使用以及該命名空間也不經常使用的情況)
eg:std::string
5.有關命名空間的一些操作:
(1),給命名空間取一個別名以及命名空間嵌套時的使用:
//命名空間MYTool已經在頭文件中定義,并且.cpp源文件已經引用頭文件,命名空間MyMath在MyTool中嵌套著
namespace mt = MyTool;
using namespace mt;
using namespace MyMath;//引用該被嵌套的命名空間
(2),代碼片段理解:(要使用cin和cout函數的準備條件)
#include <iostream>//引用這個頭文件是讓編譯器認識cin和cout標識符 using std::cin;//放開命名空間中的這兩個函數是為了開放這兩個函數的使用權限 using std::cout;
二.cin和cout:
1.是C++ 中用來做輸入輸出的操作的函數,功能分別和 C 語言的 scanf 和 printf 一樣
2.使用示例:
int x,y;
cin>>x>>y;// 從鍵盤輸入
cout<<x<<"\n"<<y<<endl;//輸出
三.string的使用:
1.c++中string類型相對于C語言中的字符數組的優點:
(1)、string具有動態大小,避免浪費存儲空間
(2)、操作簡單,比如比較兩個字符串是否相等可以用==比較
(3)、有很多方便的字符串處理函數,比如獲取字符串長度,查找子串等等
2.使用string類型代碼:
#include <string>#include<iostream>using namespace std;int main(){string s("123214");//創建s字符串并賦值為123214s.append("x");//string類型中的追加函數,用于追加字符串s.append("123"); s += "abc";//字符串也可以直接使用加法來追加s = "wqsdalfjs";//使用=賦值號可以對字符串進行賦值操作s.erase(s.begin() + 1);//用于刪除字符串指定位置處的字符s.length();//得到字符串的長度s[0];//字符串的首個字符string s1;if (s == s1)//可以用==來判斷兩個字符串是否相等{cout<<1<<endl;}return 0;}
四.c++11的標準:
1、定義變量初始化新方式:
int a(10);
int x ={(int)1.23};//這種不允許值的類型和變量的類型不一樣
2、空指針
int *p = nullptr;//nullptr是關鍵字,相當于NULL宏
3、自動類型
auto x = 10;//根據值推導x的類型,此時x的類型為int
4、decltype
int a=1;decltype(a)b;//理解為使用a的類型定義了bdecltype((a))m=a;//再加一個圓括號,給a定義了一別名m
5、for 循環新規則
string str="abcdefghijkl";for(auto i:str)// 遍歷 str 輸出,這個只能實現遍歷而不能實現循環做某種操作{cout<<i<<endl;}
6、類型取別名
using MP=int;// 新寫法
//區別于C語言中的typedef,兩者對象順序是相反的
五,異常處理簡講:
try 塊,監視及捕獲異常 catch 塊,用來處理異常 throw 用來拋出異常
throw 用來拋出某個類型的數據,表示異常。在當前層級能被try捕獲則匹配當前try后面的catch,如果能匹配就處理,如果不能匹配往上層級傳遞
?