Time of Update: 2018-12-05
stdafx.h-----------------------// stdafx.h : 標準系統包含檔案的包含檔案,// 或是經常使用但不常更改的// 特定於項目的包含檔案//#pragma once#include "targetver.h"#include <stdio.h>#include <tchar.h>#include <fstream>#include <iostream>#include <ole2.h>
Time of Update: 2018-12-05
事件,人們事先規定好的一個動作,當我們做了某件事時,會觸發該動作的發生。在win32/mfc中我們利用事先定義的宏和回呼函數來完成這些內容。自己定義的事件,主要明確兩件事情:1、要發生的動作,這個需要我們自己來定義;2、就是觸發,就是在適當的時機調用該自己定義的動作。
Time of Update: 2018-12-05
C注釋正則式及其效率思考2012-5-13 廣州•天河 雨 下面給出C注釋正則式與自動機相互轉換的例子。兩個例子都不考慮注釋標識符在字串常量中的情形(如:const char* start = "/*", *end = "*/";)。自動機轉換成正則式: 識別C注釋的自動機很容易畫出來(^/*表示除'/'及'*'以外的所有字元): 圖1TMS_LI的正則為:/\*[^*]*\*(\*|[^/*][^*]*\*)*/正則式轉換成自動機:
Time of Update: 2018-12-05
Time of Update: 2018-12-05
class A{public:A(){}A( A& n){}};void Fn1(A a){}A Fn2(){A a;return a;}void main(){A a;A b(a);//情形1: 用對象初始化另一個對象時A c = a;//情形2: 通過賦值運算,用對象初始化另一個對象,此時觸發的是拷貝建構函式,而不是operator=Fn1( a );//情形3: 對象做為參數傳遞時Fn2();//情形4: 對象做為函數傳回值時,拷貝建構函式將會在函數內部被調用}
Time of Update: 2018-12-05
C++憤恨者劄記2——函數傳回值為類對象 為避免冗餘代碼,程式使用Release配置編譯,但要把/Od選項打上,否則編譯器最佳化,會使用代碼很難懂。 當函數傳回值是基本的資料類型(如,int,char)時,會把返回結果放在eax上,這樣函數調用者就可以通過eax獲得函數返回結果了。但如果傳回值是一個類對象呢?eax根本不夠用了。實驗源碼:class Node{public: Node(){} //Node(Node& n){} int data1;
Time of Update: 2018-12-05
class ClxInc{public:int operator () ( int a){return ++a;}};template <class T>int TempFn( int a, T Fn ){return Fn( a );}int FnInc( int a ){a++;return a;}void main(){int (*p)(int);p = &FnInc;p( 0 );(*p)( 0 );p = FnInc;p( 0 );(*p)( 0 );ClxInc
Time of Update: 2018-12-05
//使用erase分別清理vector與set中的內容#include <vector>#include <string>#include <set>using namespace std;void FnVec(){vector<wstring> vec;vec.push_back( L"AAA" );vec.push_back( L"BBB" );vec.push_back( L"CCC" );vec.push_back( L"DDD"
Time of Update: 2018-12-05
C++憤恨者劄記3——函數呼叫慣例 函數呼叫慣例指的是,參數壓棧順序及彈棧位置的約定。這個約定在函式宣告時指定,如: void __stdcall Fn(int arg1, int arg2); 其中__stdcall就是呼叫慣例,表示參數從右至左入棧,而函數自己負責參數彈棧工作。 還有一種常用約定為__cdecl,表示參數從右至左入棧,而函數調用者負責參數彈棧工作。 如果沒有指定呼叫慣例,編譯器會使用預設約定。VS中預設約定可以在工程屬性中設定:
Time of Update: 2018-12-05
C++憤恨者劄記7——函數適配器考慮編寫一個通用的計數函數TestCount,再用它來統計字串空格的個數:#include <string>#include <iostream>using namespace std;bool TestIsspace( wchar_t ch ){ if ( ch == ' ' ) return true; else return false;}template <class T, class
Time of Update: 2018-12-05
未提供標頭檔情況下,C++中使用COM 前面用CPP測試COM時,需要使用MIDL產生的_i.c與*.h檔案。本文示範無這些檔案的情況下,用CPP使用COM的方法。測試工程必須是MFC工程(建立MFC工程過程省略)。1.添加TypeLib類:2.添加測試代碼:void CMFCClientDlg::OnBnClickedOk(){CFirstCoClx t;IID id;//CLSID可以從/Fo中的*.tlh中擷取,詳細資料參考MSDN index - #import
Time of Update: 2018-12-05
C++憤恨者劄記1——類對象作為函數參數的資料傳遞過程 C++繁雜的機制,加上枯燥的教科書,再加上無法迴避地要使用它,註定要造就一批C++憤恨者。本文作為C++憤恨者劄記系列第一篇,從彙編角度,觀察類對象作為函數參數時的資料傳遞過程。 若沒有特殊說明,編譯器使用的是VC++,反組譯碼使用的是Windbg.下面是它們的版本號碼: Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80
Time of Update: 2018-12-05
#include <vector>#include <string>using namespace std;//parameter 's' can only make sure reference value can't be modify according it, //but can't make sure other parameter, here is 'vec', change its reference value//so the reference
Time of Update: 2018-12-05
臨時變數的記憶體配置這裡考慮對象做為函數參數與傳回值時,使用無名臨時變數的情況。臨時變數記憶體配置class Node{public:int data1;int data2;int data3;Node(){__asm nop}};void Fn1( Node n ){n.data1++;}Node Fn2(){return Node();}void main(){__asm int 3Fn1( Node() );__asm int 3Fn2();__asm int
Time of Update: 2018-12-05
GRASP模式:General Responsibility Assignment Software Patterns:通用責任分配軟體模式 裡面重要的概念是責任,責任是類間的一種合約或是義務,可以細分為兩部分,用公式表示如下: 責任 = 知道責任 + 行為責任(這裡面似乎存在概念的迴圈定義) 註:用通俗的話來講,責任就是一個類知道要做什麼,並且能夠做什麼。 分為: Information Expert / Creator / Low coupling / High cohesion
Time of Update: 2018-12-05
ATL(ActiveTemplate Library,Active Template Library)是微軟開發的一套 COM(ComponentObject Model,元件物件模型)支援庫。通常,脫離所支援的對象而討論類庫意義不大,我就寫一篇簡單的文章介紹一下,對於想學COM的人來說,也是一塊敲門磚,只是希望別用來砸我。(鑒於這個罈子上大家都對C++ 很熟悉,所以我會拿 C++ 和 COM做很多比較,也就是說,我預計的讀者至少比較熟悉 C++。並且,雖然 COM中對象和介面的區別與 C++
Time of Update: 2018-12-05
一、用C#實現WebService是相當簡單的事情,我們只要建立一個Web服務程式,在方法名上面加上[WebMethod],部署到IIS上,就能像訪問Web網站一樣訪問WebService。用C#編寫用戶端時,只需要將WebService添加到引用,就能像調用本地方法一樣去C#
Time of Update: 2018-12-05
靜態指標成員變數用new得到的,就一定是在heap上,在程式退出時需要調用delete對指標成員進行析構。 由於靜態成員的特殊性,所以如果需要對靜態成員提前析構,則需要建立臨時指標變數得到靜態指標成員的值,然後通過臨時指標變數對所指向的對象進行析構。然後將靜態指標成員賦值為NULL。 mark:發現一個有趣的bug,在進行靜態成員變數的析構時,vs2008竟然上報指標指向的地址不在HEAP內,百思不得其解啊。
Time of Update: 2018-12-05
C++和ObjectARX開發一例//-----------------------------------------//開發環境 //vs2008+vs2008sp1+ObjectArx2010+AutoCAD2010 //vs2008建立一個win32項目或者MFC DLL項目 //vs2008設定項目屬性->配置->所有配置//vs2008設定項目屬性->配置屬性->C/C++->代碼產生->執行階段程式庫=多線程 DLL (/MD)//vs20
Time of Update: 2018-12-05
持久性和序列化