Time of Update: 2018-12-04
在linux上寫程式、做網管的人,或多或少都會幾種指令碼。指令碼語言靈活的變數類型、強大的Regex處理能力,再加上linux系統本身的管道、重新導向以及豐富的命令列工具,讓你編程起來遊刃有餘。 而C語言固然有種種優勢,但不可否認,很多場合下,用指令碼語言更為方便,比如我們將舉例說明的對設定檔的處理。 先看看我們樣本程式的任務: 假設我們有一個用c寫的程式,它有一個設定檔 user.conf,儲存了一些使用者資訊,user.conf定義如下: 1)、以 # 開頭的行為注釋行,不做處理
Time of Update: 2018-12-04
Time of Update: 2018-12-04
C語言變參技術收藏 1 函式宣告 首先,要實作類別似printf()的變參函數,函數的最後一個參數要用 ... 表示,如 int log(char * arg1, ...)這樣編譯器才能知道這個函數是變參函數。這個參數與變參函數的內部實現完全沒有關係,只是讓編譯器在編譯調用此類函數的語句時不計較參數多少老老實實地把全部參數壓棧而不報錯,當然...之前至少要有一個普通的參數,這是由實現手段限制的。 2 函數實現
Time of Update: 2018-12-04
相信很多人都看過設計模式方面的書,大家有什麼體會呢?Bridge,Proxy,Factory這些設計模式都是基於抽象類別的。使用抽象對象是這裡的一個核心。 其實我覺得架構化編程的一個核心問題是抽象,用抽象的對象構建程式的主體架構,這是物件導向編程的普遍思想。用抽象構建骨架,再加上多態就形成了一個完整的程式。由於C++語言本身實現了繼承和多態,使用這樣的編程理念(理念啥意思?跟個風,嘿嘿)在C++中是十分普遍的現象,可以說Virtual(多態)是VC的靈魂。
Time of Update: 2018-12-04
物件導向的語言裡面,出現了類的概念。這是編程思想的一種進化。所謂類:是對特定資料的特定操作的集合體。所以說類包含了兩個範疇:資料和操作。而C語言中的struct僅僅是資料的集合。(liyuming1978@163.com) 1.執行個體:下面先從一個小例子看起 #ifndef C_Class #define C_Class struct#endif C_Class A { C_Class A *A_this; void (*Foo)(C_Class A
Time of Update: 2018-12-04
經常在cpp的代碼之中看到這樣的代碼: #ifdef __cplusplus extern "C" { #endif //一段代碼 #ifdef __cplusplus } #endif 這樣的代碼到底是什麼意思呢?首先,__cplusplus是cpp中的自訂宏,那麼定義了這個宏的話表示這是一段cpp的代碼,也就是說,上面的代碼的含義是:如果這是一段cpp的代碼,那麼加入extern "C"{和}處理其中的代碼。 要明白為何使用extern
Time of Update: 2018-12-04
Time of Update: 2018-12-04
MCI_OPEN_PARMS是一結構體類型,其結構體定義為 typedef struct { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID;//設別ID LPCTSTR lpstrDeviceType;//裝置類型 LPCTSTR lpstrElementName;//檔案名稱 LPCTSTR lpstrAlias;//別名} MCI_OPEN_PARMS; 結構體成員具體為:dwCallback The low-
Time of Update: 2018-12-04
C++筆試題1.多態類中的虛函數表是Compile-Time,還是Run-Time時建立的?答案:虛擬函數表是在編譯期就建立了,各個虛擬函數這時被組織成了一個虛擬函數的入口地址的數組.而對象的隱藏成員--虛擬函數表指標是在運行期--也就是建構函式被調用時進行初始化的,這是實現多態的關鍵.2.一個父類寫了一個virtual 函數,如果子類覆蓋它的函數不加virtual ,也能實現多態?在子類的空間裡,有沒有父類的這個函數,或者父類的私人變數?
Time of Update: 2018-12-04
聲明是告訴編譯器一些資訊,以協助編譯器進行文法分析,避免編譯器報錯。而定義是告訴編譯器產生一些代碼,並且這些代碼將由連接器使用。即:聲明是給編譯器用的,定義是給連接器用的。這個說明顯得很模糊,為什麼非要弄個聲明和定義在這攪和?那都是因為C++同意將程式拆成幾段分別書寫在不同檔案中以及上面提到的編譯器只從上朝下編譯且對每個檔案僅編譯一次。 編譯器編譯器時,只會一個一個源檔案編譯,並分別產生相應的中間檔案(對VC就是.obj檔案),然後再由連接器統一將所有的中間檔案串連形成一個可執行檔案。問題
Time of Update: 2018-12-04
1. 如何擷取應用程式的執行個體控制代碼? 應用程式的 執行個體控制代碼儲存在CWinAppIm_hInstance 中,可以這麼調用 AfxGetInstancdHandle獲得控制代碼. Example: HANDLE hInstance=AfxGetInstanceHandle(); 2. 如何通過代碼獲得應用程式主視窗的指標? 主視窗的 指標儲存在CWinThread::m_pMainWnd中,調用 AfxGetMainWnd實現。 AfxGetMainWnd()
Time of Update: 2018-12-04
1.時間表示 在程式當中,我們經常要輸出系統當前的時間,比如我們使用date命令的輸出結果.這個時候我們可以使用下面兩個函數: #include time_t time(time_t *tloc); char *ctime(const time_t *clock); time函數返回從1970年1月1日0點以來的秒數.儲存在time_t結構之中.不過這個函數的傳回值對於我們來說沒有什麼實際意義.這個時候我們使用第二個函數將秒數轉化為字串.
Time of Update: 2018-12-04
《Thinking in C++》中解釋: 引用(&)像是一個能編譯器逆向引用的常量型指標。通常用於函數的參數表中和函數的傳回值,也可以獨立使用。例如:int x;int &r = x;當建立一個引用時,引用必須被初始化指向一個存在的對象,但也可以:int &q = 12;這裡,編譯器指派了一個儲存單元,它的初值初始化為12。引用必須和儲存單元聯系,訪問引用時,就是訪問那個儲存單元。如:int x = 0;int &a =
Time of Update: 2018-12-04
在使用C++編程時,經常要用到不同資料類型之間的類型轉換,可能大家對C語言的類型強制轉換比較熟悉,就是在表達時前面加一個“(強制轉換類型)”。在C++中仍然可以用C方式的對不同類之間資料類型轉換,但是,C++提供了更好的資料類型轉換方式,就是利用關鍵字“dynamic_cast”來完成對不同類之間資料類型之間的轉換。dynamic_cast的使用格式是:dynamic_cast <T> (ptr)其中,T必須是一個類的的指標或引用,也可以是 void
Time of Update: 2018-12-04
#include <stdio.h> /*標準輸入輸出定義*/#include <stdlib.h> /*標準函數庫定義*/#include <unistd.h> /*Unix標準函數定義*/#include <sys/types.h> /**/#include <sys/stat.h> /**/#include <fcntl.h> /
Time of Update: 2018-12-04
dynamic_cast< T > (arg)DescriptionIn the expression, dynamic_cast< T > (ptr), T must be a pointer or a reference to a defined class type or void*. The argument ptr must be an expression that resolves to a pointer or reference.If T is
Time of Update: 2018-12-04
25、如何擷取有關視窗正在處理的當前訊息的資訊 調用CWnd: : GetCurrentMessage可以擷取一個MSG指標。例如,可以使用 ClassWizard將幾個功能表項目處理常式映射到一個函數中,然後調用GetCurrentMessage 來確定所選中的功能表項目。 viod CMainFrame : : OnCommmonMenuHandler ( ) { //Display selected menu item in debug window . TRACE ("Menu
Time of Update: 2018-12-04
編譯器為內聯一個方法所使用的過程是這樣的:內聯方法的連續代碼塊被複製到調用該方法的調用點處。內聯方法內的任何局部變數在塊內分配。內聯方法的輸入參數和傳回值被影射到調用方法的局部變數空間。如果內聯方法有多個返回點,則這些返回點就變成內聯塊尾部的分支(可怕的goto)。所有與調用有關的痕迹以及隨之即來的所有可能的效能損失都被消除了。然而避免調用只是與內聯有關的效能項的一半,調用間最佳化是內聯效能的另一半。
Time of Update: 2018-12-04
49、如何?一個橡皮區矩形 CRectTracker是一個很有用的類,可以通過調用CRectTracker:: TrackRubberBand響應WM_LBUTTONDOWN訊息來建立一個橡皮區矩形。下例表明使用CRectTracker移動和重設視窗中的藍色橢圓的大小是很容易的事情。 首先,在檔案檔中聲明一個CRectTracker資料成員: class CSampleView : Public CView { … public : CrectTracker m_tracker; … };
Time of Update: 2018-12-04
一、 優點 使用內聯彙編可以在 C/C++ 代碼中嵌入組合語言指令,而且不需要額外的彙編和串連步驟。在 Visual C++ 中,內聯彙編是內建的編譯器,因此不需要配置諸如 MASM 一類的獨立彙編工具。這裡,我們就以 Visual Studio .NET 2003 為背景,介紹在 Visual C++ 中使用內聯匯的相關知識(如果是早期的版本,可能會有些許出入)。 內聯彙編代碼可以使用 C/C++ 變數和函數,因此它能非常容易地整合到 C/C++ 代碼中。它能做一些對於單獨使用