淺談C++中不夠熟悉的點,你有幾個?

什麼是C++:

C++是一門高效而實用的程序設計語言,C++語言中的封裝、數據隱藏、繼承、多態的實現,主要包括類的聲明、對象定義、構造函數和析構函數、運算符重載、繼承和派生、多態性實現等。學習C++一般需要從C語言的基礎開始。在學習過程中要多通過實踐的方式,學會利用C++語言解決問題,具備進一步學習利用C++開發應用程序的基礎。

淺談C++中不夠熟悉的點,你有幾個?

在實際工作中,發現大學C++教科書上的C++知識還不夠用,或者理解不夠深,為此這方面還得沖沖電。下面是簡單整理了以前不太熟悉的幾個點。

1. 構造和拷貝函數

l 賦值構造函數:T(T &)

l 賦值拷貝函數: operator = (T &)

l 移動構造函數: T(T &&)

l 移動拷貝函數:operator =(T&&)

一般如果類中有指針成員,建議 disable 掉賦值構造和賦值拷貝函數。而通常出於對性能優化的目的,可以使用移動構造函數和移動拷貝函數來減少冗餘拷貝。

舉例說明:

 
class T {
T(int);
T(const T&);
Operator = (const T&);
T(const T&&);
}
int main() {
T a = T(1);
T && b = T(2);
}

上面T a 的初始化過程中,有一次構造一次拷貝;而T b就只有一次構造了。

2. virtual

l 限定虛函數:virtual func(….) ;

l 限定純虛函數: virtual func(….) =0 , 抽象類只有純虛函數

l 限定被繼承的基類,用作虛基類,避免子類擁有基類中重複的成員方法;

例如: class B: virtual A;

class C: virtual A;
class D: class B, class C; // 那麼D的對象中只有A的一份成員;

l 抽象類的析構函數一定是虛函數(個人的理解是對於裡面的虛函數可能用到的資源是不定的)

3. C++ 11 中的自動推斷變量類型auto 的使用

Auto 的使用極大地方便了枚舉器的使用,隱藏了枚舉的過程,舉例如下:

 Auto x1=3.1415169;
Std::map mymap;
For (auto it = mymap.begin; it != mymap.end(); it++) {
……
}

4. C++ 匿名函數 lamnda 的使用

本質就是去類臨時函數定義時的名稱,通過【】代替。這種函數通常在一些算法庫中的比較函數、判斷是否相等的臨時函數的定義中。

格式如下:

[capture](parameters)->return-type{body}

其中capture高速這個臨時函數,是否以及如何使用外部的變量,規則如下:

[] //未定義變量.試圖在Lambda內使用任何外部變量都是錯誤的. 
[x, &y] //x 按值捕獲, y 按引用捕獲.
[&] //用到的任何外部變量都隱式按引用捕獲
[=] //用到的任何外部變量都隱式按值捕獲
[&, x] //x顯式地按值捕獲. 其它變量按引用捕獲
[=, &z] //z按引用捕獲. 其它變量按值捕獲

實例如下:

【】(int a, int b)->int (int z= a+b; return z);

5. 構造函數和析構函數執行的順序

具體規則如下:

l 如果對象的類型是global/static 等落在.data或者.bss段,那麼對於global的變量,先於main()函數執行構造;對於function domain的則在執行到的地方開始執行構造。析構函數按鏡像對稱的順序進行;

l 如果對象的類型是在棧上,在執行到代碼的地方開始構造,在作用域結束的地方析構;

l 如果對象的類型在堆上,根據顯式調用析構函數的順序執行;如果沒有顯式調用析構,在堆被系統釋放的時候調用析構函數;

l 對於多重繼承的情況,構造函數沿著從基類到子類的方向進行,而析構函數沿著相反方向執行。

淺談C++中不夠熟悉的點,你有幾個?

學習路線:

1、c語言入門 程序設計-算法-運算符-順序 分支 循環結構。

2、C語言精通 數組-函數字串符-指針-構造類型-預處理-存儲管理-文件操作-數據結構。

3、c++入門 面對對象編程-類和對象-運算符重載-派生於繼承,異常處理技術-C++語言標準-數據結構-(雙向鏈表-雙向隊列-樹-圖)。

4、c++精通-stl標準模板庫(容器-迭代器-算法)正則表達式-boost標準模板庫-socket網絡編程-大型企業項目實戰:-員工信息管理系統-推箱子-俄羅斯方塊-服務器-播放器-人工智能。

5、windows高級工程師:win32/mfc-windows高級編程-QT框架編程-大型企業級項目實戰項目(人臉識別-車牌識別-局域網遠程監控-等項目)

6、linux系統應用程序開發-linux內核構架研究-linux頂級網絡服務器開發及搭建。

7、大型企業項目實戰(linux內核高級虛擬內存驅動設計-linux網絡間諜系統軟件-linux內核網絡數據劫持-linux網絡閱讀系統開發

淺談C++中不夠熟悉的點,你有幾個?

喜歡小編的文章的朋友可以關注、收藏、轉發、留言,閱讀愉快!!

需要C/C++學習資料的可以關注+私信小編:“學習資料”,獲取C/C++學習資料!


分享到:


相關文章: