Time of Update: 2017-01-19
在 C++ 11 中,lambda 運算式(通常稱為 "lambda")是一種在被調用的位置或作為參數傳遞給函數的位置定義匿名函數對象的簡便方法。 Lambda 通常用於封裝傳遞給演算法或非同步方法呼叫的少量程式碼。 本文定義了 lambda 是什麼,將 lambda 與其他編程技術進行比較,描述其優點,並提供一個基本樣本。Lambda 運算式的各部分ISO C++ 標準展示了作為第三個參數傳遞給 std::sort() 函數的簡單 lambda:#include
Time of Update: 2017-01-19
匿名類類型類可以是匿名的 - 也就是說,可以在沒有 identifier 的情況下聲明類。在將類名稱替換為 typedef 名稱時,這會很有用,如下所示:typedef struct{ unsigned x; unsigned y;} POINT;注意上面樣本中顯示的匿名類的用法對於保留與現有 C 代碼的相容性很有用。在某些 C 代碼中,將 typedef 與匿名結構結合使用是很普遍的。如果您希望對類成員的引用就像它未包含在獨立類中的情況一樣出現,則匿名類也很有用,如下所示:struct
Time of Update: 2017-01-19
指向成員的指標指向成員的指標的聲明是指標聲明的特例。使用以下序列來聲明它們:[storage-class-specifiers] [cv-qualifiers] type-specifiers [ms-modifier]qualified-name ::* [cv-qualifiers] identifier[= & qualified-name :: member-name];聲明說明符: 可選儲存類說明符。 可選 const 和/或 volatile 說明符。 類型說明符:類型的名稱。
Time of Update: 2017-01-19
可以在一個類的範圍內聲明另一個類。這樣的類稱為“嵌套類”。 嵌套類被視為在封閉類的範圍內且可在該範圍內使用。若要從嵌套類的即時封閉範圍之外的某個範圍引用該類,則必須使用完全限定名。下面的樣本示範如何聲明嵌套類:// nested_class_declarations.cppclass BufferedIO{public: enum IOError { None, Access, General }; // Declare nested class BufferedInput. class
Time of Update: 2017-01-19
靜態成員類可以包含靜態成員資料和成員函數。當資料成員被聲明為“靜態”時,只會為類的所有對象保留一個資料副本。待用資料成員不是給定的類類型的對象的一部分。因此,待用資料成員的聲明不被視為一個定義。在類範圍中聲明資料成員,但在檔案範圍內執行定義。這些靜態類成員具有外部連結。下面的樣本闡釋了這一點:// static_data_members.cppclass BufferedOutput{public: // Return number of bytes written by any
Time of Update: 2017-01-19
基類繼承過程將建立一個新的衍生類別,它由基類的成員加上衍生類別添加的任何新成員組成。在多重繼承中,可以構建一個繼承關係圖,其中相同的基類是多個衍生類別的一部分。下圖顯示了此類別關係圖。單個基類的多個執行個體在該圖中,顯示了 CollectibleString 和 CollectibleSortable 的組件的圖形化表示形式。但是,基類 Collectible 位於通過 CollectibleSortableString 路徑和 CollectibleString 路徑的
Time of Update: 2017-01-19
虛函數虛函數是應在衍生類別中重新定義的成員函數。 當使用指標或對基類的引用來引用派生的類對象時,可以為該對象調用虛函數並執行該函數的衍生類別版本。虛函數確保為該對象調用正確的函數,這與用於進行函數調用的運算式無關。假定基類包含聲明為 virtual 的函數,並且衍生類別定義了相同的函數。 為衍生類別的對象調用衍生類別中的函數,即使它是使用指標或對基類的引用來調用的。 以下樣本顯示了一個基類,它提供了 PrintBalance 函數和兩個衍生類別的實現//
Time of Update: 2017-01-19
override 說明符可使用 override 關鍵字來指定在基類中重寫虛函數的成員函數。文法function-declaration override;備忘override 僅在成員函式宣告之後使用時才是區分內容相關的且具有特殊含義;否則,它不是保留的關鍵字。使用 override 有助於防止您的代碼中出現意外的繼承行為。以下樣本示範在未使用 override 的情況下,可能不打算使用衍生類別的成員函數行為。編譯器不會發出此代碼的任何錯誤。class BaseClass{ virtual
Time of Update: 2017-01-19
“解構函式”是建構函式的反向函數。在銷毀(釋放)對象時將調用它們。通過在類名前面放置一個波狀符號 (~) 將函數指定為類的解構函式。例如,聲明 String 類的解構函式:~String()。在 /clr 編譯中,解構函式在釋放託管和非託管資源方面發揮了特殊作用。解構函式通常用於在不再需要某個對象時“清理”此對象。請考慮 String 類的以下聲明:// spec1_destructors.cpp#include <string.h>class String {public:
Time of Update: 2017-01-19
複製建構函式和複製賦值運算子從 C++ 11 中開始,該語言支援兩種類型的分配:複製賦值和移動賦值。 在本文中,“賦值”意味著複製賦值,除非有其他顯式聲明。 賦值操作和初始化操作都會導致對象被複製。賦值:在將一個對象的值賦給另一個對象時,第一個對象將複製到第二個對象中。 因此,Point a, b;...a = b;導致 b 的值被複製到 a 中。初始化:在以下情況下將進行初始化:聲明新對象、參數通過值傳遞給函數或值通過值從函數返回。您可以為類類型的對象定義“複製”的語義。
Time of Update: 2017-01-19
建構函式是一種可初始化其類的執行個體的成員函數。建構函式具有與類相同的名稱,沒有傳回值。建構函式可以具有任意數量的參數,類可以具有任意數量的重載建構函式。建構函式可以具有任何可訪問性(公用、受保護或私人)。如果未定義任何建構函式,則編譯器會產生不採用任何參數的預設建構函式;可以通過將預設建構函式聲明為已刪除來重寫此行為。建構函式順序建構函式按此順序執行工作:按聲明順序調用基類和成員建構函式。如果類派生自虛擬基類,則會將對象的虛擬基指標初始化。如果類具有或繼承了虛函數,則會將對象的虛函數指標初始化
Time of Update: 2017-01-19
private 文法private: [member-list]private base-class備忘當位於類成員列表之前時,private 關鍵字指定這些成員僅可從成員函數和該類的友元中進行訪問。這適用於聲明到下一個訪問指示符或類的末尾的所有成員。當位於基類的名稱之前時,private 關鍵字指定基類的公用成員和受保護的成員為衍生類別的私人成員。類中成員的預設訪問是私人的。結構或聯合中成員的預設訪問是公用的。基類的預設訪問對於類是私人的,而對於結構是公用的。 聯合不能具有基類。例子//
Time of Update: 2017-01-19
在某些情況下,為不是類成員的函數或單獨類中的所有函數授予成員層級的訪問權會更方便。僅類實現器可以聲明其友元。函數或類不能將其自身聲明為任何類的友元。在類聲明中,使用 friend 關鍵字和非成員函數名稱或其他類,以允許其訪問你的類的專用和受保護的成員。文法 friend class-name;friend function-declarator;友元聲明如果聲明以前未聲明的友元函數,則該函數將被匯出到封閉非類範圍。友元聲明中聲明的函數被視為已使用 extern 關鍵字聲明。(有關
Time of Update: 2017-01-19
classclass 關鍵字聲明類類型或定義類類型的對象。文法 [template-spec] class [ms-decl-spec] [tag [: base-list ]]{ member-list} [declarators];[ class ] tag
Time of Update: 2017-01-19
函數調用使用括弧調用的函數調用運算子是二元運算子。文法primary-expression ( expression-list )備忘在此上下文中,primary-expression 為第一個運算元,並且 expression-list(可能為參數的空列表)為第二個運算元。函數調用運算子用於需要大量參數的操作。這之所以有效,是因為 expression-list
Time of Update: 2017-01-19
二元運算子下表顯示可重載的運算子的列表。可重新定義的二進位運算子 運算子 名稱 , 逗號 != 不相等 % 模數 %= 模數/賦值 & 按位“與” && 邏輯“與” &= 按位“與”/賦值
Time of Update: 2017-01-19
1.C++的結構體變數在聲明的時候可以省略struct,在c中這樣是不可以的,例子如下#include<iostream>#include<string>using namespace std;struct test{ int num; string name;};int main(void){ test t; t.num=1; t.name="jack"; cout<<t.num<<"
Time of Update: 2017-01-19
記得以前在大學裡學習c語言的時候,剛開始是很吃力的.入門層級的演算法中有個叫冒泡排序法,也有稱為氣泡排序法.那時候剛接觸它就對它的名字特別感興趣,因為覺得很有意思.好了,廢話不多說了,我們先一起簡單回憶下這個冒泡排序法. 一.列印行和列一般是這樣的一個簡單代碼,輸出4行4列*:for(int i = 1,i < 5,i++){ for(int j = 1,j < 5,j++){ printf("*"); }
Time of Update: 2017-01-19
在 C++11 中,預設函數和已刪除函數使你可以顯式控制是否自動產生特殊成員函數。已刪除的函數還可為您提供簡單語言,以防止所有類型的函數(特殊成員函數和普通成員函數以及非成員函數)的參數中出現有問題的型別提升,這會導致意外的函數調用。顯式預設設定的函數和已刪除函數的好處在 C++ 中,如果某個類型未聲明它本身,則編譯器將自動為該類型產生預設建構函式、複製建構函式、複製賦值運算子和解構函式。這些函數稱為特殊成員函數,它們使 C++ 中的簡單使用者定義型別的行為如同 C
Time of Update: 2017-01-19
函數調用過程c++經過編譯產生可執行程式檔案exe,存放在外儲存空間中。程式啟動,系統從外儲存空間中將可執行檔裝載到記憶體中,從入口地址(main函數起始處)開始執行。程式執行中遇到了對其他函數的調用,就暫停當前函數的執行,並儲存下一條指令的地址作為從被調函數返回後繼續執行的進入點,儲存現場。然後轉到被調函數的入口地址執行被調函數。遇到return語句或者被調函數結束後,恢複先前儲存的現場,從先前儲存的返回地址處繼續執行主調函數的其餘部分。內嵌函式函數調用需要進行現場保護,以便在函數調用之後繼續