Time of Update: 2018-12-03
最近在搞一個小程式,需要用java調用DLL。用到的技術是JNA。具體的內容在網上一搜都有,但是很多文章內容都差不多,而且都有些問題,也不知道是不是版本的問題,反正代碼拿來一copy各種問題,倒騰了好久,終於弄出點眉目出來,寫來與大家分享下。首先,c/c++代碼如下:extern "C" _declspec(dllexport) int add(int first, int second);實現代碼:int add(int first, int second) {printf("(c)
Time of Update: 2018-12-03
每個類聲明之後,每個函數定義結束之後都要加空行。空行起著分隔程式的作用,不會浪費記憶體,可是使程式的布局更加清晰。//空行void function1(...){...}void function2(...){...}程式碼:一個代碼只做一件事情,如只定義一個變數或唯寫一個語句,這樣代碼容易閱讀,並且方便於寫注釋。if,for ,while,do等語句自佔一行,執行語句不得緊跟其後。不論執行語句有多少都要加{}.int width;int height;int depth;x=a+b;y=c+
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 虛函數是物件導向設計中的一個重要內容。它的出現使得我們只需要相同的介面函數,並可以得到不同的產生結果。但是有些朋友卻知其然,不知其所以然,為什麼會出現這樣的結果,我們可以用一段代碼說明問題。首先,我們先定義兩個基本類型,一個是employee,一個是manager,看過前面一片部落格的朋友應該都有點印象:class employee{public:employee() {
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 看過設計模式的朋友都知道,我們在設計單件模式的時候離不開類的靜態函數。和類的成員變數不同,類的靜態變數屬於全部類對象資料;同樣和類的成員函數不同,類的靜態函數屬於全部類函數共有。這句話讀來想來有一些拗口,不過沒有關係,我們可以通過一段代碼來說明問題。 (1)靜態變數 老規矩,我們首先對類進行初步定義,如下所示:class employee{public:employee()
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 不知不覺當中,我們就到了最後一種設計模式,即訪問者模式。訪問者模式,聽上去複雜一些。但是,這種模式用簡單的一句話說,就是不同的人對不同的事物有不同的感覺。比如說吧,豆腐可以做成麻辣豆腐,也可以做成臭豆腐。可是,不同的地方的人未必都喜歡這兩種豆腐。四川的朋友可能更喜歡辣豆腐,江浙的人就可能對臭豆腐更喜歡一些。那麼,這種情況應該怎麼用設計模式表達呢?typedef struct _Tofu{
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 前面我們討論基本上都是C語言的內容,還沒有真正觸及到C++的相關知識。從這篇部落格之後,我們將會更多觸及類的內容。類的屬性很多,今天我們討論主要就是建構函式、解構函式。 (1)如果沒有建構函式、解構函式呢?class apple{public:void print() const {return;}};
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 拷貝建構函式和複製函數是類裡面比較重要的兩個函數。兩者有什麼區別呢?其實也很簡單,我們可以舉個例子,加入有這樣一個類的定義:class apple{public:apple() { printf("apple()!\n");}apple(apple& a) { printf("copy apple()!\n");}apple& operator=(apple&
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 繼承是類的一個基本屬性,可是在類的繼承過程中,函數是怎麼初始化?怎麼析構的呢?我們不妨看看下面這樣的一段代碼?class employee{public:employee() { printf("employee()!\n");}~employee() { printf("~employee()!\n");}};class manager : public
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
Time of Update: 2018-12-03
【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 算術符重載是類的有一個特性,但是每個人使用的方法不一樣。用的好,則事半功倍;但是如果不正確的使用,則會後患無窮。 (1) 簡單算術符介紹
Time of Update: 2018-12-03
在網上找到的,不知道是哪位大神寫的,貼出來共大家參考!一、 前言長久以來我就一直很不清楚obj檔案的內容到底是什麼,有人說是彙編,有人說是機器語言。如果是機器語言的話,那編譯的過程是怎樣加入作業系統資訊的呢?因為這個問題的不斷擴充和困擾,便決定徹底研究一下,網上幾乎找不到相關資料,作者參照了基本系統編程的書籍後自行整理而來,數目見底,僅供參考,歡迎討論。 這裡只研究C++的主流編譯過程,與Java沒有任何關係,因為使用的技術完全不一樣(Java是編譯和解釋結合的語言)。雖然不同的編譯
Time of Update: 2018-12-03
c#雖然內建記憶體回收機制,但是並不能解決程式佔用記憶體龐大的問題,如果我們仔細觀察工作管理員,我們會發現一個程式如果最小化的時候,它所佔用的會驟然減小,這時作業系統會把程式用不到的記憶體暫時放到虛擬記憶體中,當我們再把程式最大化時,發現記憶體並沒有完全的從虛擬記憶體調到記憶體中來,是因為作業系統的記憶體管理機制只調用目前需要的,那麼剩下的,有可能將來調用,有可能根本沒用。實現這個機理用到了一個API函數SetProcessWorkingSetSize(),c#中聲明如下:
Time of Update: 2018-12-03
C#
Time of Update: 2018-12-03
替換演算法將指定元素值替換為新值,使用原型如下,將迭代器[first,last)中值為old_value的元素全部替換為new_value值。 函數原型:template < class ForwardIterator, class T > void replace ( ForwardIterator first, ForwardIterator last, const T& old_value, const T&
Time of Update: 2018-12-03
大多數運算式都使用運算子,運算子結合一個或一個以上的運算元,便形成了運算式,並且返回運算結果。1.運算式 運算式是由運算子和運算元組成的。下面是幾個簡單的運算式:int i=556 //聲明一個int類型的變數i並初始化為556i = i*i-11 //改變變數i的值2.運算子 運算子是一種專門用來處理資料運算的特殊符號,下面幾個是C#中常見的運算子。 2.1算數運算子
Time of Update: 2018-12-03
Time of Update: 2018-12-03
今天下午試著用了一下static變數,結果發現自己平時在使用delete時的好多錯誤。就因為我把 delete [] pointer 寫成 delete pointer [],讓我調試了將近二十分鐘。先看一下我當時寫掉static的代碼,當然重點不是static。#include<iostream>using namespace std;class Test{ public: Test() {
Time of Update: 2018-12-03
當在C中定義了一個結構類型時,它的大小是否等於各欄位(field)大小之和?編譯器將如何在記憶體中放置這些欄位?ANSI C對結構體的記憶體布局有什麼要求?而我們的程式又能否依賴這種布局?這些問題或許對不少朋友來說還有點模糊,那麼本文就試著探究它們背後的秘密。 首先,至少有一點可以肯定,那就是ANSI C保證結構體中各欄位在記憶體中出現的位置是隨它們的聲明順序依次遞增的,並且第一個欄位的首地址等於整個結構體執行個體的首地址。比如有這樣一個結構體: struct
Time of Update: 2018-12-03
本來打算把編譯部分的內容總結一下,偶然看到一位網友的文章寫得很全面,故此稍加整理,以作備忘。 C語言的編譯連結過程要把我們編寫的一個c程式(原始碼)轉換成可以在硬體上啟動並執行程式(可執行代碼),需要進行編譯和連結。編譯就是把文本形式原始碼翻譯為機器語言形式的目標檔案的過程。連結是把目標檔案、作業系統的啟動代碼和用到的庫檔案進行組織形成最終產生可執行代碼的過程。過程圖解如下:
Time of Update: 2018-12-03
AJAXPRC是快速、簡單的Javascript遠程方法調用。它允許你使用Javascript調用服務端方法,基於JSON資料協議,開源授權(LGPL),可同步和非同步呼叫。使用AJAXRPC,您可以像開發傳統的C/S程式一樣,來開發WEB程式,讓WEB開發更簡單和高效。 支援服務端語言:Java、.Net、PHP。支援瀏覽器:IE、FireFox、Opera、Safari、Chrome。下載: Java .Net PHP 部落格 提交BUG Developer