Time of Update: 2018-12-03
意圖:表示一個作用與某對象結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作UML圖:適用:一個對象結構包含很多類對象,他們有不同的介面,而你想對這些對象實施一些依賴於其具體類的操作需要對一個對象結構中的對象進行很多不同的並且不相關的操作,而你想避免讓這些操作汙染這些對象的類,Vi s i t o r 使得你可以將相關的操作集中起來定義在一個類中。當該對象結構被很多應用共用時,用Vi s i t o r
Time of Update: 2018-12-03
意圖:提供一種方法順序訪問一個彙總對象中各個元素,而又不暴露該對象的內部表示UML圖:適用:訪問一個彙總對象的內容而無需暴露它的內部表示支援對彙總對象的多種遍曆為遍曆不同的彙總結構提供一個統一的介面解析:Iterator 幾乎是大部分人在初學C++的時候就無意之中接觸到的第一種設計模式,因為在STL之中,所有的容器類都有與之相關的迭代器.以前初學STL的時候,時常 在看到講述迭代器作用的時候是這麼說的:提供一種方式,使得演算法和容器可以獨立的變化,而且在訪問容器物件的時候不必暴露容器的內部細節,
Time of Update: 2018-12-03
將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支援可撤消操作。解析;將命令封裝在一個類中Command類,同時把接收對象也封裝在一個類中Receiver類,調用這個命令的類Invoker類,與註冊回呼函數的原理相似。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include "stdafx.h"
Time of Update: 2018-12-03
意圖:運用共用技術有效地支援大量細粒度的對象適用:一個應用程式使用了大量的對象完全由於使用大量的對象,造成很大的儲存開銷對象的大多數狀態都可變為外部狀態如果刪除對象的外部狀態,那麼可以用相對較少的共用對象取代很多組對象UML解析:Flywweight模式大量使用在當一些可以被共用的對象經常使用的情況下//test.h#include <string>#include <list>/**////////////////////////////////////////////
Time of Update: 2018-12-03
這是微軟協助文檔中對集合(set)的解釋: “描述了一個控制變長元素序列的對象(註:set中的key和value是Key類型的,而map中的key和value是一個pair結構中的兩個分量)的模板類,每一個元素包含了一個排序鍵(sort
Time of Update: 2018-12-03
1.c++ string find() #include <string>#include <iostream>using namespace std;void main(){ ////find函數傳回型別 size_type string s("1a2b3c4d5e6f7g8h9i1a2b3c4d5e6f7g8ha9i"); string flag; string::size_type position; //find 函數 返回jk 在s
Time of Update: 2018-12-03
(轉 七星重劍) C++項目要到了如Lua這種純C寫成的庫時,如果連結不過,就考慮是包含標頭檔時沒加extern “C”。 #ifdef __cplusplus extern "C" { #endif #include "lualib.h" #include "lauxlib.h" #ifdef __cplusplus } #endif 時常在cpp的代碼之中看到這樣的代碼: #ifdef __cplusplus extern "C" { #endif //一段代碼
Time of Update: 2018-12-03
1. 在宏定義的#之前可以有若干個空格、定位字元,但不允許有其它字元。宏定義在來源程式中單獨另起一行,分行符號是宏定義的結束標誌。如果一個宏定義太長,一行不 夠時,可採用續行的方法。續行是在鍵人斷行符號符之前先鍵入符號"\"。注意斷行符號要緊接在符號"\"之後,中間不能插入其它符號。2.為了保證宏調用的獨立性,作為算式的宏定義也應加括弧;3.用do{}while(0)語句包含多語句防止錯誤
Time of Update: 2018-12-03
asctime(將時間和日期以字串格式表示) 相關函數 time,ctime,gmtime,localtime表標頭檔 #include<time.h>定義函數 char * asctime(const struct tm * timeptr);函數說明 asctime()將參數timeptr所指的tm結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回。此函數已經由時區轉換成當地時間,字串格式為:“Wed Jun 30 21:49:08
Time of Update: 2018-12-03
1,首先明確 std是一個 命名空間的名字。2,其次,明確STL是 Standard Template Library的縮寫,即標準模板庫。3,2者關係: In fact, all identifiers of the C++ standard library are defined in a namespace called std. 而STL被容納與C++ Standard Library裡。 即2者均屬於 C++ Standard
Time of Update: 2018-12-03
即是在C程式中嵌入SQL語句,例子如下:串連到SAMPLE資料庫,查詢LASTNAME為JOHNSON的FIRSTNAME資訊。#include <stdio.h>#include <stdlib.h>#include <string.h>#include "util.h"#include <sqlca.h>EXEC SQL INCLUDE SQLCA; (1)main(){EXEC SQL BEGIN DECLARE SECTION; (2)ch
Time of Update: 2018-12-03
C++對象序列化,與檔案儲存類似,但是不一樣。比如在運行過程中,需要儲存某個對象,是序列化特有的功能。物件導向的語言都有這個功能,比如java。下面是轉自wiki 的介紹:http://code.google.com/p/plumgo/wiki/HSNNS_ObjectSerializationC++ Serialization
Time of Update: 2018-12-03
先要理解class的意思。class應該理解為一種類型,象int,char一樣,是使用者自訂的類型。(雖然比int char這樣build-in類型複雜的多,但首先要理解它們一樣是類型)。用這個類型可以來聲明一個變數,比如int x, myclass my等等。這樣就像變數x具有int類型一樣,變數my具有myclass類型。理解了這個,就好解釋this了,my裡的this 就是指向my的指標。如果還有一個變數myclass mz,mz的this就是指向mz的指標。
Time of Update: 2018-12-03
常見錯誤: 在使用結構體作為元素插入時,特別要注意需要重載運算子,因為set預設需要排序。請看http://zhidao.baidu.com/question/506213989.html /*set/multiset會根據待定的排序準則,自動將元素排序。兩者不同在於前者不允許元素重複,而後者允許。1) 不能直接改變元素值,因為那樣會打亂原本正確的順序,要改變元素值必須先刪除舊元素,則插入新元素2)
Time of Update: 2018-12-03
三維數組有點不好理解。很多人認為可以用 數組的數組來進行理解,或者可以用立方體來理解。而我認為可以用 樹結構來理解。比如 int array【3】【4】【5】,可以認為從根節點出來,首先有3個一級節點,每個一級節點有4個二級節點,每個二級節點有5個三級節點。 三維數組的動態分配,要注意delete,如下: int z = 2; int y = 5; int x = 6; int ***pppint = new int**[z]; for(int k = 0; k < z;
Time of Update: 2018-12-03
轉自:360 圖書館2011-09-24 09:30 在C++中子類繼承和調用父類的建構函式方法 構造方法用來初始化類的對象,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法)。因此,在建立子類對象時,為了初始化從父類繼承來的資料成員,系統需要調用其父類的構造方法。 如果沒有顯式的建構函式,編譯器會給一個預設的建構函式,並且該預設的建構函式僅僅在沒有顯式地聲明建構函式情況下建立。構造原則如下: 1.
Time of Update: 2018-12-03
轉自:http://zhidao.baidu.com/question/314680295.html長篇大論這裡就不說了,舉個例子class fruit{public: void func() { printf("fruit\n"); } virtual void vfunc() { printf("v fruit\n"); }};class apple:public fruit{public: void func()
Time of Update: 2018-12-03
7.7 杜絕“野指標”“野指標”不是NULL 指標,是指向“垃圾”記憶體的指標。人們一般不會錯用NULL指標,因為用if 語句很容易判斷。但是“野指標”是很危險的,if 語句對它不起作用。“野指標”的成因主要有兩種:(1)指標變數沒有被初始化。任何指標變數剛被建立時不會自動成為NULL 指標,它的預設值是隨機的,它會亂指一氣。所以,指標變數在建立的同時應當被初始化,要麼將指標設定為NULL,要麼讓它指向合法的記憶體。例如char *p = NULL;char *str = (char *)
Time of Update: 2018-12-03
7.4 指標參數是如何傳遞記憶體的? 如果函數的參數是一個指標,不要指望用該指標去申請動態記憶體。樣本7-4-1 中,Test 函數的語句GetMemory(str, 200)並沒有使str 獲得期望的記憶體,str 依舊是NULL,為什嗎?void GetMemory(char *p, int num){p = (char *)malloc(sizeof(char) * num);}void Test(void){char *str = NULL;GetMemory(str, 100);
Time of Update: 2018-12-03
7.5 free 和delete 把指標怎麼啦? 別看free 和delete 的名字惡狠狠的(尤其是delete),它們只是把指標所指的記憶體給釋放掉,但並沒有把指標本身幹掉。用調試器跟蹤樣本7-5,發現指標p 被free 以後其地址仍然不變(非NULL),只是該地址對應的記憶體是垃圾,p 成了“野指標”。如果此時不把p 設定為NULL,會讓人誤以為p 是個合法的指標。如果程式比較長,我們有時記不住p 所指的記憶體是否已經被釋放,在繼續使用p 之前,通常會用語句if (p !=