Time of Update: 2018-12-03
因為虛擬函數的地址翻譯取決於對象的記憶體位址,而不取決於資料類型(編譯器對函數調用的合法性檢查取決於資料類型)。原來,如果類中定義了虛擬函數,該類及其衍生類別就要產生一張虛函數表,即vtable。而在類的對象地址空間中儲存一個該虛函數表的入口,佔4個位元組,這個入口地址是在構造對象是由編譯器寫入的。 有如下C++程式://#include<stdio.h>#include<iostream>using namespace std;class CMem{public:
Time of Update: 2018-12-03
1.大小寫不敏感的string類..可以看一下char_traits的定義,仿照定義一個自己的模版類,改寫static bool __cdecl eq(const _Elem& _Left, const _Elem& _Right) { if(_Left == _Right) return true; else{ _Elem maxElem = max(_Left, _Right); _Elem minElem = (_Left+_Right)-maxElem;
Time of Update: 2018-12-03
CSharp2VB:C#代碼轉換到Vb.net的程式VB2Csharp:VB轉換到C#的程式(同時還支援Delphi、Vb6到C#的轉換)下面兩個都可以支援雙向轉換http://www.codechanger.com/線上版地址:http://www.developerfusion.com/tools/convert/csharp-to-vb/以下也是幾個VB.Net to C# (C# to
Time of Update: 2018-12-03
“該死系統存在記憶體流失問題”,項目中由於各方面因素,總是有人抱怨存在記憶體流失,系統長時間運行之後,可用記憶體越來越少,甚至導致了某些服務失敗。記憶體流失是最難發現的常見錯誤之一,因為除非用完記憶體或調用malloc失敗,否則都不會導致任何問題。實際上,使用C/C++這類沒有記憶體回收機制的語言時,你很多時間都花在處理如何正確釋放記憶體上。如果程式已耗用時間足夠長,如後台進程運行在伺服器上,只要伺服器不宕機就一直運行,一個小小的失誤也會對程式造成重大的影響,如造成某些關鍵服務失敗。對於記憶體流
Time of Update: 2018-12-03
暑假比較虛度,看著案頭各種繁雜,就想設計一個軟體系統,能直接像捷徑功能表那樣開啟的,於是便寫了如下一款作品,平台vs2008,語言C#【】 核心代碼:private void linkLabel6_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { this.process.StartInfo.Verb = "Open";
Time of Update: 2018-12-03
1.C語言聲明的單獨文法成份 聲明器是C語言聲明的非常重要成份,他是所有聲明的核心內容,簡單的說:聲明器就是標識符以及與它組合在一起的任何指標、函數括弧、數組下表等,為了方便起見這裡進行分類表示。 1)指標 (1)* (2)* const (3)* volatile (4)* const volatile (5)* volatile const 2)直接聲明器 (1)標識符 (2)標識符[下表] (3)標識符(參數)
Time of Update: 2018-12-03
在C語言中,對於三維或三維以上數組的使用並沒有很好的支援,而且使用率也非常的低,後面會對三維數組做一些簡單的分析,這篇文章主要以二維數組來探討一些C語言中數組使用的相關概念和技巧。1 一個var[i][j]引用形式的可能聲明 當你看見像var[i][j]這樣的二維數組引用形式時,你能知道他是怎麼被聲明的嗎?答案是否定的,指標和數組使用的部分通用性會讓你無法判斷這樣的一種形式的聲明原型,對於一個二維數組而言,它一般的聲明方式是: int var[10][12]; /*
Time of Update: 2018-12-03
1. 優先順序運算子的使用 我相信玩過C的人都曾有過這樣的或那樣的不可思議經曆,會非常感慨C的博大精深、深不可測,很多時候你根本不知道一條語句的真實執行情況(除非經過具體環境的編譯和執行得出結論,可能你事後還是很迷茫),其實,有些已成事實特性並不是原本設計C語言時想要看到的,因為有些運算子的優先順序是錯誤的,如果你不相信,下面就來看一下這範例子: i = 1, 2;
Time of Update: 2018-12-03
關於指標和數組斬不斷理還亂的恩怨還真是說了不少,不過現在應該已經理清了。有了上一講的基礎,本講的內容相對來說就比較容易理解了。1.指向函數的指標(函數指標)來分析這樣一個聲明,void (*f) ( ); 雖然()的優先順序高於*,但由於有括弧存在,首先執行的是解引用,所以f是一個指標;接下來執行( ),表明f指向一個函數,這個函數不返回任何值。現在得出結論:f是一個指向不接受參數且不返回任何值的函數的指標,簡稱函數指標(pointer to function)。對比一下int(*p) [100
Time of Update: 2018-12-03
uCOS-II的移植範例要求使用者編寫10個簡單的C函數:OSTaskStkInit() //必須要實現的函數,OSTaskCreat()和OSTaskCreatExt()通過調用此函數來初始化任務的棧結構.OSTaskCreatHook() //當用OSTaskCreate() 或 OSTaskCreateExt() 建立任務的時候就會調用OSTaskCreateHook()。該函數允許使用者或使用使用者的移植執行個體的使用者擴充 µC/OS-Ⅱ的功能。OSTaskSwHook()
Time of Update: 2018-12-03
原文出處:突破存取權限加入了一些自己的理解.我們在寫代碼的時候,按約定都是把成員資料放到private訪問區中,然後在通過相應的函數來存取。那又有什麼樣的代碼可以突破存取權限來直接操作類中private區段中的成員資料呢?首先,我們想到了指標,對吧~指標可是萬能之王,然而也是萬惡之源。那我們就先來看看指標如何突破馬其諾防線的。先定義一個測試類別class X{private: int m_nPrivate;public: X() : m_nPrivate(1) {
Time of Update: 2018-12-03
C++是一種物件導向的程式設計語言,我們常用它來進行物件導向的程式開發。但是,面向過程的語言如C是否可以進行物件導向的編程呢?答案是肯定的。C語言雖然沒有物件導向語言的諸多特徵,包括其核心特徵即封裝、繼承和多態,但是我們都知道,物件導向編程的實質其實是一種編程思維方式,跟使用的語言並無必然關係,但是使用物件導向的語言可以使程式員更好地實現這一思維方式。“
Time of Update: 2018-12-03
最近一直在做一個項目,主要是將原本symbian c++寫的工程移植為qt版本。這其中遇到N多問題,自己也鮮有總結,接下來幾篇文章就總結一下這其中的一些方法經驗和教訓,大家一起交流。 symbian發展到symbian3和symbian4之後:原本的symbian c++生存空間越來越小,而qt將最終成為主要的趨勢。所以原本很多用symbian c++寫的項目都面臨著一個問題:要麼最新版本全部推倒用qt重寫,要麼做移植。 可能很多人會說:symbian
Time of Update: 2018-12-03
該篇講一些移植項目進展中出現的問題: 1:我們移植出最初版本之後,別組同事拿去參考,於是他們也搭建了環境,拉下代碼,編譯也通過,但是emulator下案頭點擊表徵圖都沒反應,也不報錯,這原因何在?當在emulator中點擊運行一個程式結果毫無反應時:主要有以下幾個原因 ①缺相應的dll庫,也許你的工程要用到很多自己寫的dll庫,結果缺失或者拷貝不到位,導致exe無法找到,從而啟動不了。 ②版本不對,比如原本開發是用的qt-mobility1.0.2,
Time of Update: 2018-12-03
在學校學C的那會兒,就已經知道switch...case的執行效率要相對if...else較高了(大體上講),因為從字面上和邏輯上看,switch...case是不用像if...else那樣做一系列比較判斷就可以直接定位到相應的條件分支的。不過也沒有深究過其中的原理。後來由於一偶然原因,就明白了其中的細節。今日碰巧看到一篇blog,是講作者對此問題的思考,我覺得作者的理解大體上都是對的,不過下面跟帖的人,有人鄙夷,有人諷刺,實在是影響網容網貌,對作者本人也是沒有起碼的尊重,無法建立起平等的溝通,
Time of Update: 2018-12-03
看了書後,照著書上的方法一步一步去做,卻失敗了,555真是的,寫書的人啊,卻不考慮一下細節問題建立一個目錄[liu@liu-desktop hellomod]$mddir hellomod[liu@liu-desktop hellomod]$cd hellomod[liu@liu-desktop hellomod]$vi hellomod.c/****************hellomod.c*******************************/#include <linux/
Time of Update: 2018-12-03
Know what functions C++ silently and calls 今天繼續學習一個條款,看到了本條款,讓我更加瞭解了C++的一些內部運行機理,思考了一番,覺得C++在這方面設計真的十分嚴密,不虧是一個很優秀的語言,讓C++一直是很受歡迎的語言。閑話少說。 每一個class都會有一個或多個建構函式、一個解構函式、一個copy
Time of Update: 2018-12-03
因為一些原因,我從一個用c++做背景程式的工作室轉到了用純C語言作為遊戲背景工作室, 而這兩套背景程式都可以號稱目前中國在角色扮演類遊戲中成熟的後台架構。。c++的架構我已經基本已經很清晰了,因為看了兩個月代碼。 而這套純C語言的是某網路遊戲公司幾個比較有名的後台,中國幾大國產遊戲都在用。 然後切實感受到了物件導向和結構語言之間的差異。。。。 物件導向更注重的設計,對象與對象的關係,是把遊戲中的實體都抽象出來為實體了。處理實體之間的訊息關係。 但是純c語言,因為沒有對象的概念,因此,就是以訊息
Time of Update: 2018-12-03
Declare destructors virtual in polymorphic base classes 1、為什麼要申明虛函數
Time of Update: 2018-12-03
Make sure that objects are initialized before they're used. 昨天就已經把第四條款看完了,初始化這篇內容非常非常豐富,講解了很多,也讓我的一些疑惑解開了。由於經常加班,寫作時間比較少,我今天看寫完這篇文章,還要看下一條目,所以,我今天不能逐句的進行瞭解析,只能我覺得我認為比較重要的幾點點出來。也希望大家給點指正。變數的初始化關於"將對象初始化"這事,C++ 似乎反覆無常。如果你這麼寫: int