接著前面所述簡單原廠模式,簡單原廠模式符合物件導向4大原則:可維護,可複用,可擴充,靈活性高,耦合度低,但是他仍然有一個很 大的問題就是如果要增加新的產品,必須對工廠進行修改,這就違背了軟體設計的開閉原則 。 對於這種問題,我們可以使用原廠模式來解決。
對象屬性泛型基類可用於儲存對象的屬性,類似於DOM節點的屬性儲存,提供屬性遍曆,使用方法如下: class CView : public Base::CObjectAttributesBase{...}; //**********************************************************************// Copyright (c) 2010// 迪斯特軟體開發小組.// 檔案: ObjectAttributeBase.hpp// 內容:
在設計類時,虛函數著重體現基類或介面的設計原則。虛函數應能表達你所想要表達的,使得衍生類別在重載是不存在歧義。虛函數存在以下用法:1、虛解構函式 虛解構函式表示本類為抽象基類,使用者可以從本類派生,使用者也可通過基類對象管理衍生類別對象。public的虛解構函式比較常用,表示使用者可以管理對象的生命期。protected的虛解構函式表示使用者只能通過本對象使用衍生類別對象,但不包括生命期管理。private的虛解構函式極少使用。
ini檔案格式:;注釋[節名]鍵=值...// 讀取ini檔案中特定項的值char * GetInitKey(char *pFilename, char *pSection, char *pKey){ static char retstr[1024]; int nFlag = 0; char tmpLine[1024]; FILE *pFile; pFile = fopen(pFilename, "r"); if (pFile == NULL) { return NULL; } while (
Windows:使用CoCreateGuid函數(GUID)#include <objbase.h>#include <stdio.h>#define GUID_LEN 64int main(int argc, char* argv[]){char buffer[GUID_LEN] = { 0 };GUID guid;if ( CoCreateGuid(&guid) ){fprintf(stderr, "create guid error\n");return -
PS:相關知識請自己去看man手冊,這裡只給出一個執行個體,及建立這個執行個體的步驟。1:建立test.h, test.c檔案//test.h#ifndef TEST_H_#define TEST_H_#include <stdio.h>void PrintHello();int Add(int a, int b);#endif//test.cpp#include "test.h"//輸出文本hello, worldvoid Hello(){printf("hello, world\
功能很常用,代碼很簡單,就不多作解釋了,直接上代碼。#include <stdio.h> #include <string.h> #define MAXLEN 10240 //讀取檔案filename的內容到dest數組,最多可以讀maxlen個位元組 //成功返迴文件的位元組數,失敗返回-1 int read_file(const char *filename, char *dest, int maxlen) { FILE *file; int pos,
最近在看memcached的源碼,覺得它那種libevent+多線程的伺服器模型(multi-reactor)真的很不錯,我將這個模型封裝成一個C++類,根據我的簡單測試,這個模型的效率真的很不錯,歡迎大家試用。這個類的使用方法很簡單(缺點是不太靈活),只要派生一個類,根據需要重寫以下這幾個虛函數就行了://建立串連成功後,會調用該函數virtual void ConnectionEvent(Conn *conn) { }//讀取完資料後,會調用該函數virtual void
進程之間通訊的幾種方法:在Windows程式中,各個進程之間常常需要交換資料,進行資料通訊。常用的方法有使用記憶體對應檔通過共用記憶體DLL共用記憶體使用SendMessage向另一進程發送WM_COPYDATA訊息比起前兩種的複雜實現來,WM_COPYDATA訊息無疑是一種經濟實惠的一中方法.(ZT)WM_COPYDATA訊息的主要目的是允許在進程間傳遞唯讀資料。Windows在通過WM_COPYDATA訊息傳遞期間,不提供繼承同步方式。SDK文檔推薦使用者使用SendMessage函數,接受
以下這個小程式實現這個功能。上代碼:#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>#include <errno.h>//程式發生了嚴重的錯誤,輸出void error_quit(const char *str){fprintf(stderr, "%s\n", str);exit(1
本篇開始介紹物件導向的方式處理檔案的方式,不過缺點是開始依賴作業系統和環境,如後面所述的SDK依賴於windows,而CStdioFile依賴於MFC架構語言。 標準C++中操作檔案流的方式是Ifstream和Ofstream的輸入資料流和輸出資料流檔案類。要使用他們,你可以直接包含fstream標頭檔,當然也可以根據需要引用他們各自的標頭檔。
#include <iostream>#include <string>#include <vector>using namespace std;/*功能:字串分割傳回值: 分割後的字串數組參數:str:原字串pattern:分隔字元*/vector<string> split(const string &str, const string &pattern){int current, pos,
這篇文章只是對c++、dll和com的泛泛而談,更為詳細的內容請參考《com本質論》,這篇文章也算是《com本質論》第一章的讀書筆記或總結。如有不對之處,希望大家批評指正。在windows下使用c++編寫代碼的人代碼複用的常用方式大概就是c++類、dll和com一、c++代碼重用的缺陷
類執行個體化後的對象是由成員變數和方法組成。各成員變數的當前值構成了對象的狀態,當各成員變數的值發生變化時,就有可能由量變發生質變,此時我們認為對象的狀態發生了改變。對象的方法分兩類,一種是改變對象的值(有可能導致對象狀態發生變化),我們稱之為命令;一種是不改變對象的值,我們稱之為查詢。類設計時,需要重點考慮這三者的關係。 1、盡量保持類的良好狀態。
類設計前首先需要確定的是,該類所執行個體化的對象是值語義還是引用語義。值語義一般用於非獨佔性資來源物件,表示該對象可以像int一樣的工作,可以任意的拷貝和重新賦值,而不會引起資源泄漏或者切割(指部分資源釋放而部分泄漏)。引用語義一般用於獨佔性資源封裝對象,表示該對象不允許拷貝和重新賦值。從文法的角度上來說,以下代碼對值語 義是有效,而對引用語義是無效的:CMyObject a,c;CMyObject b(a); //值語義有效,引用語義無效c = a;
最近才開始看設計模式,想想這玩意本來應該在大學的時候就應該瞭解的東西,到現在了竟然只瞭解到皮毛,慚愧啊~~~ 話說這是從一個計算機的案例來引發的思考,現在我想做一個計算機,包含加減乘除運算; 考慮下,設計這個類,一般的設想是直接設計一個運算類,裡麵包含加減乘除運算的介面,然後就可以完工了。
現在要做一個東西出來,因為涉及的知識面比較廣,所以需要系統的把知識整理一下,剛好用到檔案操作這一塊,就整理了一下相關的要點。操作檔案的方式很多,這裡重點介紹幾個,本次介紹C Run-Time Library的檔案操作方式。C Run-Time Library中操作檔案的方式又有兩種,一種是直接使用庫的API來進行;一種是使用FILE的I/O標準流操作來進行。下面分別說明。一使用C Run-Time Library庫的API來操作檔案。因為C Run-Time
實現函數是指單獨完成某種具體任務的函數,如向量的點積、差積,矩陣的行列式計算等。實現函數必須遵守以下原則:1、單一職責原則: 函數只能擁有一種功能,不能包含多個功能,但可調用其它實現函數完成特定任務。常見的一種錯誤執行個體是對容器物件進行統計的實現,其代碼既包含了對容器子物件的遍曆,又包含對單個子物件的統計處理.2、標準資料類型原則: 實現函數的參數類型必須為語言內建的標準資料類型,不可以為使用者自訂的資料類型.3、外部零依賴原則:
通過python的ctypes模組調用C函數,常常需要用到使用者指標資料指標。如通過python調用Win32 API產生視窗時使用的視窗流程就是一個執行個體,本文通過這個執行個體說明如何在python對象和C語言中的指標對象進行相互轉換問題。 1、python對象轉換為C指標對象 當Python調用SetWindowLong綁定一個Python對象為使用者資料時,我們可以如此調用: from ctypes import * SetWindowLong=
最近一個項目的用戶端要改成Flex,使用Socket與C++通訊時遇到了安全沙箱問題,這是我的解決方案; 1):策略檔案與主通訊端在同一連接埠,只需調用 Socket.connect() 或 XMLSocket.connect() 方法; 2):策略檔案與主通訊端在不同連接埠,需使用特殊的“xmlsocket”文法調用 Security.loadPolicyFile() 方法,如下所示:Security.loadPolicyFile("xmlsocket://server.com:2525