Time of Update: 2018-12-05
C++中運行時類型識別(RTTI) 1、dynamic_cast操作符 將基類類型的指標或引用安全的轉換為衍生類別類型的指標或引用。注意:基類至少帶有一個虛函數,這樣源類型才可能是多態的,才會在運行時確定類型。否則將導致編譯錯誤。 如果轉換成功,則返回一個指向轉換後類型的指標或引用;如果轉換失敗,指標類型的轉換結果為0,參考型別則拋出bad_cast類型的異常。 如果是指標類型,運算元可以是0。但是沒有空類型的引用。測試代碼:#include
Time of Update: 2018-12-05
喜歡最後那段比喻一、預備知識—程式的記憶體配置 一個由c/C++編譯的程式佔用的記憶體分為以下幾個部分 1、棧區(stack)—> 由編譯器自動分配釋放,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。 2、堆區(heap)—> 一般由程式員分配釋放,若程式員不釋放,程式結束時可能由OS回收。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。
Time of Update: 2018-12-05
CppLinq的擴充// cpplinqex.hpp#include "cpplinq.hpp"namespace cpplinq{ namespace detail{template<typename TKeyPredicate, typename TSelector>struct to_groups_selector_builder :
Time of Update: 2018-12-05
.net架構的System.Threading命名空間提供了一些可以進行多線程編程的類和介面。除同步線程活動和訪問資料的類(Mutex、Monitor、Interlocked、AutoResetEvent 等)外,此命名空間還包含一個 ThreadPool 類(它允許使用者使用系統提供的線程池)和一個 Timer 類(它線上程池線程上執行回調方法)。 以Thread類來說明,在MSDN說明如下: Thread 類 [C#]:建立並控制線程,設定其優先順序並擷取其狀態。
Time of Update: 2018-12-05
Begin Analysis!Move in : intReduce : type-specifier --> int ● Reduce : declaration-specifiers --> type-specifier ● Move in : helloReduce : direct-declarator --> identifier ● Reduce : declarator --> direct-declarator ●
Time of Update: 2018-12-05
這是msdn中的一段話:C# allows derived classes to contain methods with the same name as base class methods.The base class method must be defined virtual.If the method in the derived class is not preceded by new or override keywords, the compiler will issue a
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++中使用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
GRASP模式:General Responsibility Assignment Software Patterns:通用責任分配軟體模式 裡面重要的概念是責任,責任是類間的一種合約或是義務,可以細分為兩部分,用公式表示如下: 責任 = 知道責任 + 行為責任(這裡面似乎存在概念的迴圈定義) 註:用通俗的話來講,責任就是一個類知道要做什麼,並且能夠做什麼。 分為: Information Expert / Creator / Low coupling / High cohesion
Time of Update: 2018-12-05
#include "apue.h"#include <fcntl.h>#include <pthread.h>void * copyFile(void *);// 建立空的檔案int createFile(int fd, int size);/** 確定檔案所屬的大小範圍,根據這個大小範圍確定拷貝子進程的數目 * * 傳回值 1 ------- 檔案大小小於10K, 1個拷貝子進程用於拷貝該檔案 * 2 -------
Time of Update: 2018-12-05
謎題2.3 其他類型的轉換請問,下面這個程式的輸出是什嗎?#include <stdio.h>#define PR(x) printf(#x " = %g/t",(double)(x))#define NL putchar(’/n’)#define PRINT1(x1) PR(x1); NL#define PRINT2(x1,x2) PR(x1); PRINT1(x2)main(){ double d=3.2, x; int i=2, y; x =
Time of Update: 2018-12-05
1、可採用建構函式的初始化列表:Book::book():size(100),weight(50){}//假設size weight 均為int類型 類名為Book2、若採用預設的建構函式(或者說編譯器建立的建構函式), 則有: A 、如果該對象在全域範圍中定義(不在任何的函數中),或者是定義為靜態局部對象:類類型由建構函式初始化 , 內建類型的成員變數初始化為0 B、如果對象在局部範圍中定義:類類型由建構函式初始化 , 內建類型的成員變數沒有被初始化For
Time of Update: 2018-12-05
今天碰到一個某公司的筆試題(被鄙視了): char s[] = "\\141\141abc\t";cout << s << endl;cout << strlen(s) << endl;//請問輸出結果?答案:\141aabc9(如果你是大牛 一看就知道答案 下面的東西就別看了 , 就放小弟一馬,別鄙視我了)前兩個 字元大家比較熟悉,肯定是一個 \ ,後面的141 是三個字元 , 但是到了 \141 我就煩糊塗了, 到底是幾個字元?其實\141
Time of Update: 2018-12-05
由於malloc的低效,一直在尋找替換的方案,最後突發其想,封裝一個FastMM的DLL作為C++的記憶體管理器;然後重載全域的new和delete操作符。如上方法執行之後,再跑原來的測試程式,效率果然與FastMM版本的一致了。我原來以為VC版STL的預設記憶體管理器,會有大量的最佳化,後來跟進去才發現,它也不過是用了new和delete,如果不重載,則最終是調用malloc的。如果要讓STL也使用FastMM,則只能使用靜態版的CRT。
Time of Update: 2018-12-05
需要單獨實現 :void list_element_destroy(struct list *ele)int list_element_cmp(void* l1 , void* l2)這兩個函數,就可以構成一個通用的list,作業碼struct list{ void * datas; struct list * next;};struct list * g_first = NULL;struct list * create_list_ele(void * data){
Time of Update: 2018-12-05
【前言】當我們使用Visual C++進行ADO編程時,一項頗為頭疼的工作就是對VARIANT欄位類型的處理。通常做法是,先把VARIANT類型轉換為形式上較為類似的C++類型,然後再把轉換後的資料存放在一個類(class)或結構(structure)中。即便如此,對VARIANT資料類型的處理在一定程度上也影響到了程式的效能。ADO為我們提供了一個介面,該介面使我們可以把資料直接讀取到本地,從而繞開對於複雜的VARIANT資料類型的處理。同時,ADO還定義了一組預先處理宏,用來簡化介面的使用。
Time of Update: 2018-12-05
using System.Runtime.InteropServices; using System.Runtime.ConstrainedExecution; using System.Runtime.Serialization; public class PDA{ [DllImport("rapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
Time of Update: 2018-12-05
override是指在不同範圍中,多個函數原型完全一樣,而實現卻不同的函數。在C++中,經常發生在類的繼承中。當基類中的某個方法是virtual或pure
Time of Update: 2018-12-05
C++中的對象是不能直接在Delphi中用的,主要是在Delphi中沒有C++的類聲明,不知道傳遞過來的記憶體塊的結構。即便是把C++的類翻譯到Delphi中,也是不能直接使用的,因為兩種語言對對象的結構組織是不同的。但兩者有一點相同,就是虛擬方法表,只要我們保證兩邊聲明的類的虛擬方法表一致,就可以實現在Delphi中調用C++對象的虛方法。舉例:C++中有個類如下class CTest {public: virtual void* __cdecl
Time of Update: 2018-12-05
發送請求這時候確定請求要發送的目標。除非本地策略指定,除非發送目標必須按照下面提到的DNS來確定。如果路由集中的第一個元素是一個嚴格的路由,那麼路由過程必須被設定在請求的Request-URI頭域中。否則路由過程被設定在請求中第一個Route頭域的值(如果有Route頭域存在)中,或者如果Route頭域不存在路由過程被設定在Request-URI頭域中。這些路由過程產生的一序列地址、連接埠和傳輸協議,傳輸時將嘗試向這序列中的地址和連接埠傳輸。無論哪一種URI作為路由過程的輸入,如果Request