Time of Update: 2018-07-25
原文(C# Multithreading and Events):http://www.codeproject.com/Articles/886223/Csharp-Multithreading-and-Events First let’s start off with there is no perfectly safe multithreaded event handling as there are caveats/conditions that must be
Time of Update: 2018-07-25
很久很久以前。。。在一個類裡面 有 變數、有屬性、有方法、其實還可以有委託(又名代理)、有事件 ,就像Button類中有Name、有getValue()、有Click一樣 委託: Delegate 傳回型別 MyDelegate(參數); MyDelegate adelegate = new MyDelegate(方法); &
Time of Update: 2018-07-25
C#中委託的理解(方便Java的童孩們理解) 定義:委託即Java中的抽象方法,是一個沒有實現的方法,沒有方法體。要在程式啟動並執行時候才知道它的具體啟動並執行是哪一部分代碼(這個定義是從Java角度理解的) 使用:1、定義委託(委託定義的傳回型別和形參要與指定的實現函數的傳回型別和形參一致)。文法格式如下: 修飾符
Time of Update: 2018-07-25
1.委託概述 委託是C#中新加入的一個類型,可以把它想作一個和Class類似的一種類型,和使用類相似,使用一個委託時,需要兩個步驟,首先你要定義一個委託,就像是定義一個類一樣;然後,你可以建立一個或多個該委託的執行個體。 定義一個委託的文法是這樣的: [public/protected/private] delegate returnType delegateName(paramtype param1,…) 這是我自己寫的,
Time of Update: 2018-07-25
在讀一本C#的入門書時,終於看到了類,看到了類的事件,書上講得很簡單,看例子卻看不懂了——這也難怪,C++基礎並不牢靠、完全沒有物件導向程式設計思想的我,一下子看到那麼多類絞在一起,中間還夾雜著事件、委託這樣陌生的概念,自然讀得一頭霧水。於是去查msdn,說讓我先看委託——有過幾次經驗,比較信任msdn,便先去看msdn,沒想到一看就是一下午的功夫。 下面將自己淺顯的理解寫下來,不期為他人有何啟發,只是
Time of Update: 2018-07-25
以下內容只是個人理解,僅供參考。 什麼是委託。 先看最簡單的委託例子: namespace DelegateTest{ public delegate void MessageDelegate(string name); class Program { private static void SaySomething(string name) { Console.WriteLine("You
Time of Update: 2018-07-25
static_assert: 這個宏用於檢測和診斷編譯時間錯誤。編譯期,這是一個與 CRT-assert(運行時宏)相反的宏。這個好東西用於檢測編譯時間程式的不變數。 這需要一個運算式可以被計算為 bool 或 string (字串)。如果這個運算式的值為 false ,那麼編譯器會出現一個包含特定字串的錯誤,同時編譯失敗。如果為 true 那麼沒有任何影響。 我們可以在以下使用 static_assert A. namespace / global scope
Time of Update: 2018-07-25
[+] C++11中引入的auto主要有兩種用途:自動類型推斷和傳回值佔位。auto在C++98中的標識臨時變數的語義,由於使用極少且多餘,在C++11中已被刪除。前後兩個標準的auto,完全是兩個概念。 1. 自動類型推斷 auto自動類型推斷,用於從初始設定式中推斷出變數的資料類型。通過auto的自動類型推斷,可以大大簡化我們的編程工作。下面是一些使用auto的例子。
Time of Update: 2018-07-25
傳回值 decltype(運算式) [傳回值的類型是運算式參數的類型] 這個可也用來決定運算式的類型,就像Bjarne暗示的一樣,如果我們需要去初始化某種類型的變數,auto是最簡單的選擇,但是如果我們所需的類型不是一個變數,例如傳回值這時我們可也試一下decltype。 現在我們回看一些例子我們先前做過的, [cpp] view plain copy
Time of Update: 2018-07-25
原則: 1、如果沒有為事件寫好事件處理常式,那麼事件(也是個類,類對象)為空白 2、前面所述的 事件+=委託(事件處理常式)
Time of Update: 2018-07-25
產生隨機數字 假設我們有一個vector<int>容器,想用100以內的隨機數初始化它,其中一個辦法是通過generate函數產生,如代碼1所示。generate函數接受三個參數,前兩個參數指定容器的起止位置,後一個參數指定產生邏輯,這個邏輯正是通過Lambda來表達的。 代碼 1 我們現在看到Lambda是最簡形式,只包含捕獲子句和函數體兩個必要部分,其他部分都省略了。[]
Time of Update: 2018-07-25
private void CreateImage(string checkCode) { int iwidth = (int)(checkCode.Length * 15); &
Time of Update: 2018-07-25
基本IO庫類型: istream(輸入資料流)類型, 提供輸入操作 ostream(輸出資料流)類型,提供輸出操作 cin, 一個istream對象,從標準輸入讀取資料 cout, 一個ostream對象,向標準輸出寫資料 cerr,一個ostream對象,通常用於輸出程式錯誤資訊,寫入到標準錯誤 >>: 用來從一個istream對象讀取輸入資料
Time of Update: 2018-07-25
C++中,模板的特化可以實現對不同的資料類型進行不同的處理: 比如我們要對int類型的資料用快速排序法進行排序 對float類型的資料用插入排序法進行排序 template<typename T>void sort(T arg[], int size) {cout << "temp speclized use" << endl;}template<> //特化void
Time of Update: 2018-07-25
有的時候程式中存在隱藏式轉換 比如下面這個例子 #include<iostream>using namespace std;class myComplex {private:int real; //複數的實部int image; //複數的虛部public:myComplex(int real = 0, int image = 0) {this->real = real;this->image = image;}friend bool
Time of Update: 2018-07-25
重載操作符的目的:的 C++中預定義的運算子的操作對象僅限於基本的內建資料類型 大多時候我們需要對我們的類似類型進行類似運算,這個時候我們需要對運算子進行重新定義,賦予其新內容 賦予其新的功能,以滿足自身的需求 運算子多載的實質就是函數重載或函數多態。運算子多載是一種形式的C++多態。目的在於讓人能夠用同名的函數來完成不同的基本操作。 基本格式如下: <傳回型別說明符>
Time of Update: 2018-07-25
類型轉換符採用通用形式: operator /*重載類型*/() {/*內容*/} 對任何可作為函數的傳回型別(除了void之外),都可以進行重載 不允許轉換為數組或函數類型,轉換為指標類型以及參考型別是可以的 operator int(Small Int& ); // error:nonmemberclass SmallInt{public:int operator int(); // error: return listoperator
Time of Update: 2018-07-25
在前面我們提到過:當沒有使用者定義賦值操作符時,編譯器會預設產生一個進行淺型拷貝 如指標不但會賦給指向的值,還會賦給地址,這回產生問題 這個問題對引用而言,適不適用呢? #include <iostream>using namespace std;class myTestTwo {private:int value;int &ref = value; //建立value的引用public:myTestTwo(int i) {value = i;ref =
Time of Update: 2018-07-25
賦值操作符也可以被繼承。 基類的操作符可以被子類訪問使用 例子如下 #include <iostream>using namespace std;//操作符能否被繼承??class A {public:A& operator=(const A& obj) {cout << "the = operator called!" << endl;return *this;}};class B: public
Time of Update: 2018-07-25
我們可以通過檔案流來控制檔案的輸入以及輸出: fstream: 建立一個未綁定的檔案流 fstream fstrm("file.txt") 建立一個fstream,並開啟名為s的檔案 可以是字串或指標, 可以設定開啟的mode 檔案流名.open("file.txt") 開啟名未file.txt的檔案,並將檔案與fstrm綁定 檔案流名.close();